作用:用于对结构的操作(包括数据库、表、索引、视图、触发器等)
# tab联想
mysql --no-beep -uroot -proot --auto-rehash
# 显示数据库
show databases;
# 显示当前正在使用的数据库
select database();
元数据:information_schema
核心库:mysql
性能相关:performance_schema
对DBA有好处:sys
数据库在进行注释的时候:#、-- 、/* */
# 创建数据库
create database DBName;
# 删除数据库
drop database DBName;
# 使用数据库
use DBName;
先把数据库创建出来
create database newdb default character set utf8;
进行数据库的复制
mysqldump -u root -p123456 --add-drop-table olddb| mysql -u root -p123456 newdb
列column = 域field = 字段
数值类型 int
文本、二进制 char、varchar
日期 date datetime
# 查看表格
show tables;
create table tableName (field1 type1 [constraint1],field2 type2 [constraint]… )
例子
# 创建表
create table member
-> (id int,
-> name char(20),
-> age int,
-> math float);
显示表的创建过程
show create table tableName
显示表的结构(字段、列、域名)
describe tableName
简写:desc tableName
alter table tableName add (field1 type1 [constraint1])
alter table member add English float default 60;
modify
不能改变列(域)的名字
alter table tableName modify field1 type [constraint]
alter table member modify name varchar(20);
change
可以改变列(域)名字
alter table tableName change oldName newName type [constraint1])
alter table member change name mname varchar(20);
修改表中列的相对顺序
修改某字段在为第一列
alter table tableName modify field1 type1 [constraint1] first;
alter table member add chinese float first;
修改某字段在某列之后
alter table tableName modify field2 type2 after field1;
alter table member modify chinese float after math;
注意
不能直接修改某字段在除了第一列的其他列,比如第二列;不能修改某字段在某列之前
alter table tableName drop field
alter table member drop English;
drop table test1;
清空表的数据,表的结构还是存在的,不能通过事务日志回退
truncate table xxx;
rename table oldName to newName;
结构的复制,包括约束条件
# 格式
create table newName like oldName;
# 案例
create table customer_tmp_like like customer;
数据和结构全部复制,约束条件不会复制
# 格式
create table newName select field1... from oldName;
# 案例
create table customer_tmp select * from customer;
作用:用于对数据库表中数据进行操作
# 格式
insert into tableName [field1,field2...] values (field1Value,field2Value...);
# 案例
insert into member (id,name,age,math) values (1,'qiaofeng',30,60);
insert into member (id,name) values (5,'zsy'); # 未插入的值是NULL
# 格式
insert into tableName values (allFieldValue);
# 案例
insert into member values (2,'xuyifeng',21,100);
# 格式
insert into tableName [field1,field2...] values (field1Value,field2Value...),(field1Value,field2Value...),....;
# 案例
insert into member (id,name,age,math) values (3,'zhoukaige',22,80),(4,'zhongwei',22,70);
# 格式
update tableName set field1=xxx [where condition]
不加where子句,直接更新所有数据
# 案例
update member set e_date = '2023-12-28 14:05:26';
加where子句,更新指定数据(注意where可以是范围)
# 格式
update member set e_date='2021-2-22 11:47:00' where id=1;
# 案例
update member set age = 24 where id = 5;
更新时使用表达式
update member set math=english+age+id*3 where id=1;
# 格式
delete from tableName [where condition]
如果不加where子句,删除表中所有数据,效果与truncate相同
delete from member;
如果加where子句,删除表中符合条件的数据
delete from member where id = 5;
作用:用于查询数据
在数据库中,0、‘\0’、“”(空字符串)和NULL表示不同的概念:
0: 通常表示数值零。在数据库中,这可能是整数或浮点数字段的值。
‘\0’: 表示空字符,通常在字符数据中使用。在某些编程语言和数据库中,'\0’是字符串的终止符,表示字符串的结束。
“”(空字符串): 表示一个不包含任何字符的字符串。在字符型字段中,空字符串与NULL不同,它是一个有效的字符串对象,只是它的长度为零。
NULL: 表示缺少值或未知值。在数据库中,NULL用于表示一个字段没有被赋予具体的值。
总的来说,0是数值零,'\0’是空字符,""是空字符串,而NULL表示缺少值。在不同的上下文和数据库中,它们的行为可能有所不同。
select column1, column2...
from table
where [ conditions ]
group by column1, column2...
having [ conditions ]
order by column1, column2...
不加where条件
# 格式
select * from tableName
加where条件
# 格式
select * from tableName where conditions
# 案例
select id,name from member where id > 1;
# 格式
select distinct field1 from tableName;
# 案例
select distinct e_date from member;
select age,age+10 from member;
select age,age+10 as total from member;
< > <= >= = <>(不等于)
闭区间
select age from member where age between 30 and 50;
# 显示在in列表中的值,而不是一个范围,注意与between...and...的区别
select * from member where age in (30,60);
Like语句中,% 代表零个或多个任意字符,_ 代表一个字符,例first_name like ‘_a%’;
# 查询name以z开头的数据
select * from member where name like 'z%';
# 查询name以g结尾的数据
select * from member where name like '%g';
# 查询name的第二个字母为h的数据
select * from member where name like '_h%';
select * from member where name is NULL;
# 格式
select field1... from tableName order by field1
select * from member order by math [asc/desc]
# 案例
select age from member order by age asc;
limit限定行数,offset指定偏移点
# 限制输出数据的条数,此处限制为两条数据
select * from member order by age asc limit 2;
# 先偏移一行,然后再限制输出数据的条数
select * from member order by age asc limit 2 offset 1;
# 格式
select field1... from left_table join_type right_table [on conditions1] [where condition2]
# 格式
select * from left_table cross join right_table;
# 案例
select * from customer cross join order_table;
返回连接表中符合连接条件及查询条件的数据行。
内连接如果不指定条件,就与交叉连接效果一样了
三种形式
显示形式
显示内连接
# 格式
select * from tableName1 inner join tableName2 [on conditions][where 条件]
# 案例
select * from customer inner join order_table on customer.id = order_table.user_id;
# 可以取别名偷懒!!!
select * from customer as c inner join order_table as o on c.id = o.user_id;
隐式内连接
# 格式
select * from tableName1,tableName2 [where conditions]
# 案例
select * from customer, order_table where customer.id = order_table.user_id;
注意:连接的时候,必须要有on子句
左外连接left [outer] join
特点:不仅包含符合连接条件的数据,还包含左表中的其他数据行,以左表为主表 会显示主表中的多有数据行 右表中复合连接条件的会显示的上面几行 不符合连接条件的直接显示NULL
# 格式
select field1... from left_table left outer join right_table on conditions;
# 案例
右外连接right [outer] join
特点:以右表为主表 如果主表中的数据少于副表 副表中不符合连接条件的数据不会显示
# 格式
select field1... from left_table right outer join right_table on conditions1 where conditions2;
作用:保证插入到数据库中的数据是正确的
保证每条记录(每行数据)是唯一的,通过主键来区分
主键:唯一,非空
保证每个字段或者域或列符合某种类型或限制(非空、默认值、自增)
特征
保证一个表的外键和另一个表的主键对应
不能引用不存在的实体
目的
保证数据的一致性
primary key
唯一,非空
特殊的唯一约束
主键的创建方式
定义字段时候直接指定
表中字段定义完毕后指定
# 案例
alter table customer_tmp modify id int primary key;
主键是用来唯一标识表中每一行数据的字段,就像每个人都有唯一的身份证号一样。这有助于确保表中的每一行都有一个独特的标识。
mysql> create table customer (
-> id int auto_increment,
-> name varchar(30),
-> age int,
-> primary key(id)
-> );
foreign key
创建方式两种
create table order_table (order_id int auto_increment,
order_name char(20),
price int,
usr_id int,
PRIMER KEY(order_id),
[CONSTRAINT order_table_member]
FOREIGN KEY(usr_id) REFERENCES member(ID));
# 格式
alter table tableName add constraint keyName foreign key(fieldName) references tableName2(field1)
# 案例
alter table order_table add constraint pk_order_mem foreign key(user_id) references member(id);
# 外键名字可省略,默认创建外键名字
alter table order_table_tmp add [CONSTRAINT `order_table_tmp_ibfk_1`] foreign key(user_id) references customer_tmp(id);
删除外键
# 格式
alter table tableName drop foreign key keyName
# 案例
alter table member drop foreign key fk_order_mem;
插入时候,外键必须存在
删除的时候,必须考虑外键约束
如果想修改表的外键名字,可以先删除外键约束,然后再创建
外键用于建立不同表之间的关联。它是另一表的主键,通过在当前表中引用其他表的主键,可以实现表与表之间的连接。
避免数据的冗余