Sql,分为DQL(查询),DML(修改),DDL(管理),TCL(事物的处理)。
DDL语句: 数据定义语句,定义了不同的数据库,表,列,索引等。
DML语句: 数据操纵语句,用于添加,删除,更新和查询数据库记录和检查数据完成性。
DCL语句: 数据控制语句,定义了数据库,表,列,字段等的访问权限和安全级别。
CREATE DATABASE 库名; //创建数据库
CREATE DATABASE 库名 CHARACTER SET utf8; //创建数据库并指定库的字符编码
ALTER TABLE 库名 CHARACTER SET utf8; //修改数据库的字符集编码
DROP DATABASE 库名; //删除数据库
/*案例*/
CREATE DATABASE school; //创建一个姓名为 student 的数据库
DROP DATABASE school; //删除了姓名为 student 的数据库
CREATE DATABASE school CHARACTER SET utf8; //创建一个姓名为 student 的数据库,并指定使用utf8编码
SHOW DATABASES; //查看已经创建的数据库
use 数据库; //在操作表之间需要先选择一个数据库
CREATE TABLE 表名(字段名 类型,字段名 类型 ....); //创建表
CREATE TABLE 表名(字段名 类型,字段名 类型 ....)CHARACTER SET utf8; //创建表并指定表的字符编码
ALTER TABLE 表名 CHARACTER SET utf8; //修改表的字符集编码
DROP TABLE 表名; //删除表
ALTER TABLE 表名 RENAME 新表名 //修改表名
ALTER TABLE 表名 MODIFY 字段名 类型; //修改已经创建表字段的类型
ALTER TABLE 表名 ADD 字段名 类型; //添加新的字段
ALTER TABLE 表名 DROP 字段名; //删除已经存在的字段
ALTER TABLE 表名 CHANGE 原字段名 新字段名 类型; //修改已经存在字段的名称和类型
ALTER TABLE 表名 ADD 新字段名 类型 AFTER 已有字段名; //在已有字段名后面插入新的字段
ALTER TABLE 表名 MODIFY 字段名 类型 FIRST; //将这个字段放到最前面
/*案例*/
use school; //选择student数据库,接下来就可以对数据库进行操作了
SHOW TABLES; //查看数据库中存在的表
CREATE TABLE ceshi(
ceshi CHAR,
);
DROP TABLE ceshi; //删除 表名为ceshi的表
//创建一个名字为student的表
CREATE TABLE student(
学号 int(8),
姓名 CHAR(8),
行吧 CHAR(4),
年龄 int(4),
班级 CHAR(20)
);
ALTER TABLE student RENAME students; //修改student表的表名为students
ALTER TABLE students MODIFY 学号 char(8); //修改字段学号的类型为char
ALTER TABLE students ADD 电话号码 char(13); //添加新的字段电话号码 类型为char
ALTER TABLE students DROP 学号; //删除已经存在的字段 学号
ALTER TABLE students CHANGE 行吧 性别 char(4); //修改原字段名称的行吧为性别jia
ALTER TABLE students ADD 家庭住址 char(20) AFTER 电话号码; //在电话号码的前面添加字段家庭住址
ALTER TABLE students ADD 学号 char(10);
ALTER TABLE students MODIFY 学号 char(10) FIRST;
DESC students; //查看表的字段信息
INSERT INTO 表名 VALUES(‘内容1’,‘内容2’,‘内容3’...); //需要注意插入内容的顺序是否对应
//只对表部分字段进行插入
INSERT INTO 表名(字段名)VALUES(‘内容’);
INSERT INTO 表名(字段名1,字段名2,字段名3...)VALUES(‘内容1’,‘内容2’,‘内容3’...);
//一次性插入多条记录
INSERT INTO 表名 VALUES(‘内容1’,‘内容2’,‘内容3’...),(‘内容1’,‘内容2’,‘内容3’...).....;
/*案例*/
//插入一条记录
INSERT INTO students VALUES('20200001','张大胖','男',18,'19数据库1班','翻斗花园8栋5单元1号','18366579916');
//插入多条记录
INSERT INTO students VALUES
('20200001','张二胖','男',18,'19数据库1班','翻斗花园7栋5单元1号','18366579916'),
('20200002','张三胖','男',19,'19数据库1班','翻斗花园7栋5单元2号','18366579917'),
('20200003','张四胖','女',17,'19数据库1班','翻斗花园7栋5单元3号','18366579918'),
('20200004','李二胖','男',18,'19数据库1班','翻斗花园7栋5单元4号','18366579919'),
('20200005','李三胖','女',50,'19数据库1班','翻斗花园7栋5单元5号','18366579911'),
('20200006','李四胖','女',99,'19数据库2班','翻斗花园7栋5单元6号','18366579912'),
('20200007','王二胖','男',7,'19数据库2班','翻斗花园7栋5单元7号','18366579913'),
('20200008','王三胖','女',31,'19数据库2班','翻斗花园7栋5单元8号','18366579914'),
('20200009','王四胖','男',23,'19数据库2班','翻斗花园7栋5单元9号','18366579926'),
('20200010','徐二胖','男',17,'19数据库2班','翻斗花园7栋5单元10号','18366579816'),
('20200011','徐三胖','女',16,'19数据库3班','翻斗花园7栋5单元11号','18366579116'),
('20200012','徐四胖','男',19,'19数据库3班','翻斗花园7栋5单元12号','18366579316'),
('20200013','徐大胖','男',13,'19数据库3班','翻斗花园7栋5单元13号','18366579116'),
('20200014','王大胖','女',28,'19数据库3班','翻斗花园7栋5单元14号','18366579316'),
('20200015','李大胖','男',687,'19数据库4班','翻斗花园7栋5单元15号','18366577616'),
('20200016','张七胖','女',953,'19数据库4班','翻斗花园7栋5单元16号','18366552116'),
('20200017','刘九胖','男',48,'19数据库4班','翻斗花园7栋5单元17号','18366579221');
//将字段名2为内容A的那条记录下的字段名1的内容更新为内容B 字段1和字段2可以为同一字段
UPDATE 表名 SET 字段名1='B' WHERE 字段名2='A';
UPDATE 表名 SET 字段名1='B',字段名2 WHERE 字段名3='A';
/*案例*/
UPDATE students SET 班级='19数据库2班' WHERE 姓名='张三胖'; //将张三胖的班级调整到2班
UPDATE students SET 班级='19数据库1班',电话号码='18365891254' WHERE 姓名='徐三胖';
DELETE FROM 表名 WHERE 字段名='a1'; //将字段名为a1的所以记录删除
DELETE a,b FROM 表1 a,表2 b WHERE a.字段名=b.字段名 and b.字段名='a1'; //删掉多个表的记录。
//使用的时候一定要加WHERE条件不然会把所有的记录都删除。
/*案例*/
DELETE FROM students WHERE 姓名='张大胖'; //删除张大胖这条记录
DESC 表名; // 显示表的状态
SELECT * FROM 表名; // * 代表查询表的所有记录,会显示所以字段的记录
SELECT 字段名1,字段名2,字段名3 FROM 表名; //显示固定字段的记录
SELECT * FROM 表名 WHERE 字段名='a'; //显示满足条件的字段的记录
/*案例*/
SELECT * FROM students; //显示students表里面的所以记录
SELECT 学号,姓名,班级 FROM students; //只显示学号,姓名,班级 这个三个字段相关的信息
SELECT * FROM students WHERE 班级='19数据库4班'; //只显示四班人员的信息
SELECT * FROM 表名 ORDER BY 字段名; //依照某一字段名从小到大排序显示
SELECT * FROM 表名 ORDER BY 字段名 DESC; //依照某一字段名从大到小排序显示
SELECT * FROM 表名 ORDER BY 字段名 LIMIT 2; //排序后,只显示的前三行
SELECT * FROM 表名 ORDER BY 字段名 LIMIT 1,5; //排序后,只显示从第二行开的向后三行
/*案例*/
SELECT * FROM students ORDER BY 年龄; //按照年龄从小到大排序显示
SELECT * FROM students ORDER BY 年龄 DESC; //按照年龄从大到小排序显示
SELECT * FROM students ORDER BY 年龄 LIMIT 2; //只显示前三行
SELECT * FROM students ORDER BY 年龄 LIMIT 1,5; //只显示从第二行开的向后三行
//常用的聚合函数 count 求记录数量、sum 求和、max 最大值、min最小值.....
SELECT 聚合函数 FROM 表名;
SELECT COUNT(1) FROM students; //students表中有多少条记录
//根据函数对数据进行分类查询
SELECT 字段名,聚合函数 FROM 表名 GROUP BY 字段名;
SELECT 班级,COUNT(1) FROM students GROUP BY 班级; //每个班级中有多少人
SELECT max(年龄),min(年龄) FROM students; //表中年龄最大的,最小的。
//分类查询后在汇总数量
SELECT 字段名,聚合函数 FROM 表名 GROUP BY 字段名 WITH ROLLUP;
SELECT 班级,COUNT(1) FROM students GROUP BY 班级 WITH ROLLUP; //每个班级中的人数,以及总人数
//对分类数据进行筛选
SELECT 字段名,聚合函数 FROM 表名 GROUP BY 字段名 HAVING 聚合函数>2;
SELECT 班级,COUNT(1) FROM students GROUP BY 班级 HAVING COUNT(1)>3; //显示人数大于3个的班级
//语法错误 检查关键字拼写是否正确,是否使用了中文符号
ERROR 1064 (42000): You have an error in your SQL syntax;
//因为设置了主键,主键字段里不能有重复的数据。
ERROR 1062 (23000): Duplicate entry '000001' for key 'PRIMARY
//数据库已经存在
ERROR 1007 (HY000): Can't create database 'YGGL'; database exists
//插入数据数量与所有字段的数量不匹配
ERROR 1136 (21S01): Column count doesn't match value count at row 1
//解决方案
仔细检查命令,核对INSERT INTO 表名(字段名1,字段名2...)VALUES(‘内容1’,‘内容2’...)命令字段是否于插入的数据一致。
//检查是否存在中文字符
ERROR 1054 (42S22): Unknown column '‘0001’' in 'WHERE clause'
//查询的表不存在
ERROR 1146 (42S02): Table 'YGGL.姓名' doesn't exist
//数据库不存在
ERROR 1049 (42000): Unknown database 't'
//mysql不能显示中文 建表时没有设置相关字符编码
ERROR 1366 (HY000): Incorrect string value: '\xE7\x94\xB7' for column '性别' at row 1
//解决方案
show create table student; //查看当前表的字符类似
alter table 表名 default character set utf8; //修改当前表的字符编码为utf8
alter table 表名 change 字段名 字段名 类型 character set utf8; //修改表中字段的字符编码为utf8