1.CRUD(Create,Retrieve(查),Update,Delete)
1)新增
insert into 表名 values(值,值..);
只插入name,id这一列会被默认值填充为null
多条记录插入
这个错误信息通常出现在尝试将包含非ASCII字符(如中文字符)的字符串插入到MySQL数据库中,而该列或表的字符集不支持这些字符时。具体来说,错误信息中的'\xE5\xBC\xA0\xE4\xB8\x89'
是“张三”这两个汉字在UTF-8编码下的十六进制表示形式
-
检查并设置正确的字符集: 确保你的数据库、表以及对应的列都使用了支持中文字符的字符集,比如
utf8mb4
。utf8mb4
是utf8
的一个超集,它能够支持更多的字符,包括emoji表情符号等。 -
COLLATE = utf8mb4_unicode_ci;
这部分定义了数据库、表或列在进行字符串比较时使用的排序规则。collate(核对)
如果数据库、表或列的字符集设置不支持这些多字节字符(例如使用了latin1
),就会出现这种错误
修改数据库字符集
ALTER DATABASE your_database_name CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci;
修改表字符集
convert(转变)
ALTER TABLE student CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
查看当前数据库的字符集
SHOW CREATE DATABASE your_database_name;
查看当前表的字符集
SHOW CREATE TABLE student;
2)查询
全列查询:表中所有行/列都查询出来
select * from 表名;
服务器通过网络把查询出来的数据返回给客户端,客户端以表格的形式打印出来
如果数据库中当前这个表的数据非常多就可能会产生问题(读取硬盘,操作网络,可能把网卡的带宽跑满,会造成拥堵,其他客户端想访问服务器会变慢)
指定列查询
select 列名,列名 from 表名;
select id from student;
查询字段为表达式
select id,name,english-10 from exam_result;
这样的操作不会修改数据库服务器上的原始数据,只是在最终响应的临时结果做了计算;
表达式查询是列和列之间的运算
select name,chinese+english+math from exam_result;(简单的统计操作)
别名
查询的时候给列/表达式指定别名;
select 表达式 as 别名 from 表名;
去重 distinct
distinct修饰某个列/多个列
值相同的行只会保留一个
名字不一样就保留了
排序 order by
asc 升序(默认),desc 降序 指定某个列把行进行排序
select 列名 from 表名 order by 列名 asc/desc;
排序不影响原有数据在mysql服务器上的存储顺序
order by 还可以针对表达式进行排序
order by 指定多个列排序,现根据数学成绩排序,数学成绩相同,再按照英语成绩排序
select * from exam_result order by math desc,english;(数学降序,英语升序)
null参与各种运算结果还是null;
条件查询 where
select 列名 from 表名 where 条件;
常见运算符
>,>=,<,<= | |
= | NULL不安全 NULL=NULL结果是NULL |
<=> | 等于,NULL安全,NULL<=>NULL结果为true,有NULL的数据要用<=> |
!=,<> | 不等于 |
BETWEEN A AND B | 范围[A,B] A<=value<=B |
IN(option..) | 如果是option中的任意一个,返回true |
IS NULL | |
IS NOT NULL | |
LIKE | 模糊匹配,%表示任意多个字符,包括0,_表示任意一个字符 |
AND | 多个条件都成立(优先级高于OR) |
OR | 任意一个条件成立 |
NOT | 条件为真结果为假 |
分页查询 LIMIT
offset 偏移量,表示从第几个下标开始
它们都会从第6行开始返回3行数据(因为偏移量是从0开始计数的)
3)修改
update 表名 set 列名=值,列=值 ... where 条件;
4)删除
delete from 表名 where 条件/order by/limit;
不指定任何条件就是删除整个表
和 drop table 不一样 ,drop table删除了表,也删除了表里的记录
delete只是删除了表里的记录,表还在(空表)