Linux || MySQL数据库基础语句
文章目录
- 数据库
- MySQL服务启动
- 登录和退出
- SQL
- 分类
- DDL
- 操作数据库:CRUD
- Create:创建
- Retrieve:查询
- Update:修改
- Delete:删除
- 使用数据库
- 操作表
- Create:创建
- 数据类型
- 约束
- 主键约束:primary key
- 非空约束:not null 某一列的值不能为null
- 唯一约束:unique 某一列的值不能重复
- 外键约束:foreign key
- 复制表
- Retrieve:查询
- Update:修改
- Drop:删除
- DML
- 添加数据
- 删除数据
- 修改数据
- DQL
- 查询表中的记录
- 基础查询
- 多个字段的查询
- 去除重复 DISTINCT
- 计算列
- 起别名
- 条件查询
- where字句后跟条件
- BETWEEN AND
- IN(集合)
- LIKE:模糊查询
- IS NULL
- AND &&
- OR ||
- NOT !
- 查询语句
- 排序查询
- 分组查询:
- 分页查询
- Linux访问mysql
数据库
底层是TCP协议
Linux文件编译时,要连接mysql数据库
gcc -o test test_conn.c -lmysqlclient
- 进入mysql
MySQL服务启动
1.手动
2.cmd ->services.msc
3.管理员身份打开cmd
net stop MySQL57:启动mysql服务
net start MySQL57:关闭mysql服务
登录和退出
登录
mysql -u root -p
mysql -hip -u root -p
mysql --host=ip --user root --password退出:
exit
quit
ctrl + d目录结构
安装目录
数据目录
root
root % 远程登录
root localhost 从本地登录数据库修改密码
管理员用户状态下:
alter user 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '111111';
select version(); //显示当前版本
select database(); //查看当前使用的是那个数据库
select user(); //查看当前登录用户
SQL
Structured Query Language 结构化查询语言
语法
- 可以单行或多行书写,以分号结尾
- 空格和缩进 增强语句可读性
- MySQL中的SQL语句不区分大小写,关键字建议使用大写
- 注释: 单行注释:-- 或 # 多行注释:/* */
分类
DDL(Data Definition Language)数据定义语言 | DML(Data Manipulation Language)数据操作语言 | DCL(Data Control Language)数据控制语言 | DQL(Data Query Language)数据查询语言 |
---|---|---|---|
定义数据库对象:数据库 表 列等, | 对数据库中表的数据进行增删改 | 数据库的访问权限和安全级别,创建用户 | 查询数据库中表的记录数据 |
关键字:create,drop,alter | 关键字:insert,delete,update | 关键字:GRANT, REVOKE | 关键字:select,where |
DDL
操作数据库:CRUD
Create:创建
create database db1;//创建数据库create database db1 character set utf8;//创建数据库时默认utf8create database if not exists db1;//db1不存在时创建数据库,存在则不创建create database if not exists db1 character set utf8;//创建数据库,判断是否存在,并指定字符集为utf8
Retrieve:查询
show databases;//查询所有数据库名称show create database db1;//查询某个数据库的字符集
Update:修改
alter database 数据库名称 character set 字符集名称;//修改数据库字符集
Delete:删除
drop database 数据库名称; //删除数据库drop database if exists 数据库名称;//判断数据库存在,存在则删除
使用数据库
use 数据名称; //使用数据库select database(); //查询当前正在使用的数据库名称
操作表
Create:创建
create table 表名(列名1 数据类型1 约束,列名2 数据类型2,...列名n 数据类型n //最后一列不需要逗号);
create table student(id int,name varchar(32),age int,score double(4,1),birthday date,insert_time timestamp
);
create table #Temp(字段1 类型,字段2 类型...);//临时表表名前面加“#”
数据类型
1.int:整数类型TINYINT:字节大小:1
2.double:小数类型
3.date:日期,年月日
4.datetime:日期,年月日时分秒
5.timpstamp:时间错类型,年月日时分秒,如果不赋值,或赋值为null,则默认使用当前系统时间来自动赋值
6.char : 0~255 长度大小等于输入字符个数加一
varchar:字符串,name varchar(20):姓名最大20个字符 // 输入字符个数等于长度大小
约束
概念:对表中的数据进行限定,保证数据的正确性,有效性和完整性
分类:
主键约束:primary key
- 非空且唯一
- 一张表只能有一个字段为主键
- 主键就是表中记录的唯一标识
- 创建表时添加主键约束
CREATE TABLE stu( id INT PRIMARY KEY, NAME VARCHAR(20) );
- 删除主键
ALTER TABLE stu DROP PRIMARY KEY;
- 创建表完后添加主键
ALTER TABLE stu MODIFY id INT PRIMARY KEY;
- 自动增长
如果某一列是数值类型的,使用auto_increment可以来完成值自动增长
CREATE TABLE stu(
id INT PRIMARY KEY AUTO_INCREMENT, NAME VARCHAR(20)
); //创建表时添加主键约束,并完成主键自动增长ALTER TABLE stu MODIFY id INT; //删除自动增长
ALTER TABLE stu MODIFY id INT AUTO_INCREMENT; //添加自动增长
非空约束:not null 某一列的值不能为null
- 创建表时添加约束
CREATE TABLE stu( id INT, nam VARCHAR(10) NOT NULL -- name非空 );
- 创建表完后添加非空约束
ALTER TABLE stu MODIFY NAME VARCHAR(10) NOT NULL;
- 删除非空约束
ALTER TABLE stu MODIFY NAME VARCHAR(10);
唯一约束:unique 某一列的值不能重复
- 唯一约束可以有null值,但是只有一条记录为null
- 删除唯一约束
ALTER TABLE stu DROP INDEX phone_number;
- 创建表时添加唯一约束
CREATE TABLE stu( id INT, phone_number VARCHAR(20) UNIQUE );
- 表创建后添加唯一约束
ALTER TABLE stu MODIFY phone_number VARCHAR(10) UNIQUE;
外键约束:foreign key
复制表
create table stu like student;//创建stu表和 student表一样
select * into B from A where 1=0;//只复制结构
select * into B from A;//复制数据
Retrieve:查询
show tables; //查询所有表
desc 表名; //查询表结构
show create table t_user;
Update:修改
alter table 表名 rename to新的表名; //修改表名
show create table 表名;//查看表的字符集
alter table 表名 character set 字符集名称; //修改表的字符集
alter table 表名 add 列名 数据类型; //添加一列
alter table stu change 列名 新列名 新数据类型; //修改列名称类型
alter table stu modify 列名 新数据类型; //修改列类型
alter table stu drop 列名; //删除列
Drop:删除
drop table
drop table if exists 表名;
DML
添加数据
语法:insert into 表名(列名1,列名2,,列名n) values(值1,值2,,值n);
注:
1.列名和值要一一对应
2.如果表名后,不定义列名,则默认给所有列添加值
3.除了数字类型,其他类型需要用引号(" ") 引起来 、单双都可以
删除数据
//语法:delete from 表名 [where 条件];
注:
1.如果不加条件,则删除表中所有记录
2.要删除所有记录
1.delete from 表名; --不推荐使用,有多少条记录就会执行多少次删除操作
2. TRUNCATE TABLE 表名; 推荐使用、先删除表,并且创建一张一样的表
修改数据
语法:update 表名 set 列名1 = 值1,列名2 = 值2.。。 where 条件
注: 不加任何条件 会将所有数据全部修改
DQL
查询表中的记录
1.语法
select
字段列表from
表名列表where
条件列表group by
分组字段having
分组之后的条件order by
排序limit
分页限定
基础查询
多个字段的查询
select 字段名1,字段名2.。。。from 表名;
注意:查询所有字符段可以使用*来代替字段列表
SELECT NAME,age FROM student;
SELECT * FROM student; //查询所有的信息
SELECT address FROM student; //查询地址
去除重复 DISTINCT
SELECT DISTINCT address FROM student; //消除相同的地址 SELECT DISTINCT NAME,address FROM student; //当姓名和地址都相同时才会消除
计算列
可以使用四则运算计算一些列的值(数值型)
IFNULL(表达式1,表达式2):null 参与的运算,计算结果都为null
表达式1:那个字段需要判断是否为空
表达式2:如果该字段为null 后的替换值
SELECT NAME,math,english,math+english FROM student; //如果有null参与的运算计算结果都为null SELECT NAME,math,english,math+IFNULL(english,0) FROM student;
起别名
AS 或者 空格
SELECT NAME,math,english,math+IFNULL(english,0) AS 总分 FROM student; SELECT NAME,math,english,math+IFNULL(english,0) 总分 FROM student;
条件查询
where字句后跟条件
运算符: >、 <、 >=、 <=、 =、 <>或 !=
SELECT * FROM student WHERE age!=35;
BETWEEN AND
SELECT * FROM student WHERE age BETWEEN 30 AND 40;
IN(集合)
SELECT * FROM student WHERE age IN(22,35,45);
LIKE:模糊查询
占位符:
_ :单个任意字符
%:多个任意字符
SELECT * FROM student WHERE NAME LIKE '马%'; //姓马的人
_马% //第二个字是马的人 %马% //姓名中含有马的人 ___ //姓名是三个字的人
IS NULL
SELECT * FROM student WHERE english IS NULL;
AND &&
SELECT * FROM student WHERE age>=20 AND age<=30;
OR ||
SELECT * FROM student WHERE age = 20 OR age = 35;
NOT !
SELECT * FROM student WHERE english IS NOT NULL;
查询语句
排序查询
- order by 子句
排序方式
ASC:升序 默认的
DESC:降序
如果有多个排序条件,则前边的条件值一样时,才会判断第二条件
order by 排序字段1 排序方式1,排序字段2 排序方式2.。。SELECT * FROM student ORDER BY math DESC, english DESC;
- 聚合函数:将一列数据作为一个整体,进行纵向的计算
- count:计算个数
会默认排除null值
SELECT COUNT(english) FROM student;
SELECT COUNT(IFNULL(english,0)) FROM student;
- max:计算最大值
- min:计算最小值
SELECT MAX(math) FROM student;
SELECT MIN(math) FROM student;
- sum:计算和
- avg:计算平均值
SELECT SUM(math) FROM student; SELECT AVG(math) FROM student;
分组查询:
- group by 子句
注意:
- 分组之后查询的字段:分组字段,聚合函数
- where 和having区别
where在分组之前进行限定,如果不满足条件,则不参与分组,having在分组之后进行限定,如果不满足条件,则不会被查询
where后不可以跟聚合函数,having可以进行聚合函数的判断
SELECT sex,AVG(math),COUNT(id) FROM student GROUP BY sex; SELECT sex,AVG(math),COUNT(id) FROM student WHERE math>70 GROUP BY sex HAVING COUNT(id)>2;
分页查询
语法:limit 开始的索引,每页查询的条数
公式:开始的索引 = (当前的页码-1)*每页显示的条数
limit是MySQL的“方言”
SELECT * FROM student LIMIT 0,3; -- 第一页SELECT * FROM student LIMIT 3,3; -- 第二页
Linux访问mysql
#include <stdio.h>
#include <stdlib.h>
#include <mysql/mysql.h> //引用头文件
int main() {
MYSQL mysql; //初始化连接
if ( mysql_init(&mysql) == NULL ) { printf("mysql init err\n");
return 0; }
if ( mysql_real_connect(&mysql,"localhost","root","123456","testdb",3306,NULL,0) == NULL)
//连接数据库
{printf("connect mysql failed\n");
return 0;
}
printf("connect mysql success\n");
//char* sql = "insert into student2 values(6,'小王')";
char* sql = "select * from student2";
int query_res = mysql_query(&mysql,sql);
if ( query_res != 0 ) {printf("queryerr:%s\n",mysql_error(&mysql));
return 0; }
//MYSQL_RES * mysql_res =mysql_use_result(&mysql);
MYSQL_RES * mysql_res =mysql_store_result(&mysql);
if ( mysql_res == NULL ) {
printf("result err:%s\n",mysql_error(&mysql));
return 0; }
//判断返回的行数
int num = mysql_num_rows(mysql_res);
if ( num == 0 ) {
printf("没有记录\n");
return 0; }
printf("得到:%d 条记录\n",num);
MYSQL_ROW sqlrow;
for( int i = 0; i < num; i++) {
sqlrow = mysql_fetch_row(mysql_res);
if (sqlrow == NULL) { printf("数据处理完,或者出错\n");
break; }
//判断列数
int fields = mysql_field_count(&mysql); for( int j = 0; j < fields; j++) { printf("fieds[%d]=%s\n",j,sqlrow[j]); } }
//MYSQL_ROW sqlrow = NULL;
//while( ( sqlrow = mysql_fetch_row(mysql_res)))
//{ //printf("sqlrow[0]=%s,sqlrow[1]=%s\n",sqlrow[0],sqlrow[1]); //
}
Linux || MySQL数据库基础语句相关推荐
- Linux Mysql 数据库基础
目录 Linux Mysql 数据库基础 一.数据库 数据库简介 数据库的分类 数据库的发展史 数据库系统发展阶段 DBMS 数据库管理系统 数据库管理系统的优点 数据库管理系统的基本功能 数据库系统 ...
- mysql数据库基础语句讲解
mysql数据库基础讲解 一.数据库客户端命令 二.数据库基础sql语句 三.数据表基础语句 四.数据的增删改查(重点) 切记sql语句之后一定要加 ; 一.数据库客户端命令 1.mysql: mys ...
- Mysql数据库基础语句总结
MYSQL数据库练习笔记 一.准备操作 启动mysql服务器: net start mysql 关闭mysql服务器: net stop mysql 登陆客户端数据库: mysql -u用户名 ...
- linux下mysql数据库基础及客户端命令详解
linux下mysql数据库基础及客户端命令详解 1.mysql数据库存储引擎: SHOW ENGINES; #查看mysql支持的存储引擎 常见有如下两个存储引擎: MyISAM:每表三个文件: ...
- Linux MYSQL 数据库
Linux MYSQL 数据库 1.1.概述: DBMS datebase management system 数据库管理系统 DML:date manapulate lanaguage 数据操 ...
- 使用C语言访问MySQL数据库基础
使用C语言访问MySQL数据库基础 一.MySQL管理 包含在MySQL发行版中的一些有用的工具程序使管理工作变得相当容易. 除mysqlshow命令以外,所有的MySQL命令都接受所示的3个标准参数 ...
- MySQL数据库基础(五)——SQL查询
MySQL数据库基础(五)--SQL查询 一.单表查询 1.查询所有字段 在SELECT语句中使用星号""通配符查询所有字段 在SELECT语句中指定所有字段 select fro ...
- mysql 磁盘限额_Linux运维知识之为Linux MySQL数据库设置磁盘限额
本文主要向大家介绍了Linux运维知识之为Linux MySQL数据库设置磁盘限额,通过具体的内容向大家展现,希望对大家学习Linux运维知识有所帮助. 因为MySQL数据库本身没有磁盘限额的功能,我 ...
- linux mysql 磁盘_Linux运维知识之为Linux MySQL数据库设置磁盘限额
本文主要向大家介绍了Linux运维知识之为Linux MySQL数据库设置磁盘限额,通过具体的内容向大家展现,希望对大家学习Linux运维知识有所帮助. 因为MySQL数据库本身没有磁盘限额的功能,我 ...
最新文章
- 1013. 数素数 (20)
- 做网页需要学哪些计算机知识,网页美工设计需要掌握的电脑常识
- 下次迟到的借口有了!牛津大学发现时钟越准确,产生的熵越高
- 北京soul_打破虚拟迎接现实,“Soul”让网络社交楚楚不凡
- nginx的error.log日志常见的几个错误解决方法
- Py之seaborn:数据可视化seaborn库(二)的组合图可视化之密度图/核密度图分布可视化、箱型图/散点图、小提琴图/散点图组合可视化的简介、使用方法之最强攻略(建议收藏)
- 发表国外期刊注意事项
- 力扣--让字符串成为回文串的最少插入次数
- matlab符号函数绘图法_转载:MATLAB 符号函数作图
- java asm tree_使用ASM 4处理Java类文件–第二部分:Tree API
- leetcode——15.3Sum
- 国嵌c语言深度,国嵌C语言3部全
- 【Elasticsearch】 解决数据较少的时候 算分不准的问题 dfs_query_then_fetch
- 数据可视化的关键因素有哪些
- 基本数据类型的包装类和随机数
- 纳德拉:Excel是微软的最佳象征 难以想象没有它的世界
- HDMI中所说的EDID是什么
- IDA及插件MIPSROP安装——《揭秘家用路由器0day漏洞挖掘技术》学习笔记
- Excel收纳箱:如何通过VBA获A列数据的最大行数
- 计算机毕业设计Python+uniapp基于微信小程序某企业考勤系统(小程序+源码+LW)
热门文章
- JS正则——身份证正则
- 如何远程管理Linux服务器?
- webpack vue-loader was used without the corresponding plugin. Make sure to include VueLoaderPlugin
- Flash入门教程:给任意照片添加雪景动画_Flash_||太平洋电脑网
- Latex 引入参考文献 \begin{document}报错
- outlook恢复本地邮件到服务器
- 云计算——云计算部署形成及应用
- python爬取网抑云音乐评论
- 电容笔和触控笔区别有哪些?平板电脑平替电容笔排行榜
- python 字符串转16进制