#MySQL # 显示全部数据库 SHOW DATABASES; # 创建数据库 CREATE DATABASE day19; # 删除数据库 drop DATABASE day19; # 使用数据库 USE day19; # 查看有哪些表 SHOW TABLES; # 查看表结构 DESC phones; ------------------------------------------------------------------------------------------------------------------------ # 表结构的增删改查 # 创建表 CREATE TABLE phones ( id INT, name VARCHAR(20), price DOUBLE, jieshao VARCHAR(200) ); # 删除表 DROP TABLE phones; # 查看建表语句 SHOW CREATE TABLE phones; # 查看当前的使用的数据库 SELECT database(); # 修改表的名字 RENAME TABLE phones TO phone; # 向表中添加一列(可以有column 也可以没有) # alter table 表名 add (column 可有可无) 新列名 类型; alter TABLE phone add COLUMN num INT; ALTER TABLE phone add sum int; desc phone; # 修改列的名字 # alter table 表名 change 原列名 新列名 新表名类型; ALTER TABLE phone CHANGE sum he int; # 修改列的类型 # alter table 表名 modify 列名 新的类型; ALTER TABLE phone MODIFY he VARCHAR(20); # 删除一列 # alter table 表名 drop 列名; ALTER TABLE phone DROP he; # 修改表的字符集(注意,utf-8 在这里叫做 utf8) # alter table 表名 character set 新的编码; ALTER TABLE phone character SET gbk; show CREATE TABLE phone; ALTER TABLE phone character SET utf8; # 表内容的增删改查 # 新增表内容 # insert into 表名 values(对应列类型的值,对应列类型的值,对应列类型的值,...);必须全部字段都填写,否则报错 INSERT INTO phone VALUES (1,'小米',2199,'真的很烫',3); # INSERT INTO phone VALUES (2,'小米2',2199,'真的很烫'); 报错 SELECT * from phone; # insert into 表名 (想要添加的对应字段名,想要添加的对应字段名,想要添加的对应字段名),values(对应前面字段名类型的值,对应前面字段名类型的值,对应前面字段名类型的值);必须完全对应 INSERT INTO phone (id,jieshao,name) VALUES (2,"还是有点烫",'小米2'); # insert into 表名 (对应列类型的值,对应列类型的值,对应列类型的值,...),(对应列类型的值,对应列类型的值,对应列类型的值,...);一次插入多条数据 INSERT INTO phone VALUES (3,'小米3',3333,'改进不少',6),(4,'小米4',4288,'可以遥控电视',7); # 修改内容 # update 表名 set 字段名=字段值,字段名=字段值;(可以追加where)(今天只有update和设置字符集 语句中有set) UPDATE phone SET num=5; UPDATE phone SET num=4 WHERE id=1; # 删除表的内容 # delete from 表名 where 字段名=值;(注意:不写where语句将全部一条一条的删除整张表的数据); DELETE FROM phone WHERE name='小米'; SELECT * FROM phone; # truncate 表名; 直接删除表结构,再创建一张新的表 TRUNCATE phone; # 查询表(重中之重) # 查询所有数据(可以加where) # select * from 表名; SELECT * FROM phone; # 查询指定字段(可以加where) # select 字段名 (as(可以省略) 别名) from 表名; SELECT price FROM phone; SELECT price AS '价格' FROM phone; SELECT price '价格' FROM phone; # 条件查询 # select * from 表名 where 条件 select * FROM phone WHERE id=3; # 连接符:and or not (相当于: & | !); SELECT * FROM phone WHERE id=3 and name='小米3'; SELECT * FROM phone WHERE id=1 OR id=2; SELECT * FROM phone WHERE NOT id=1; # 运算符:> < = >= <= != <>(大于,小于,大于等于,小于等于,不等于,不等于); SELECT * FROM phone WHERE price>2000; SELECT * FROM phone WHERE price<3000; SELECT * FROM phone WHERE price>=3000; SELECT * FROM phone WHERE price<=3000; SELECT * FROM phone WHERE price!=3000; SELECT * FROM phone WHERE price<>3000; # 特殊条件:字段名 between 值1 and 值2;相当于where 字段名1>值1 and 字段名1<值2; SELECT * FROM phone WHERE price BETWEEN 3000 AND 5000; SELECT * FROM phone WHERE price>3000 AND price<5000; # 特殊条件:in(值1,值2);相当于 or SELECT * FROM phone WHERE price IN(3333,4288); SELECT * FROM phone where price=3333 OR price=4288; # null值判断:is null; (is not null; not 字段名 is null;)前者效率高 SELECT * FROM phone WHERE price is NULL ; SELECT * FROM phone where price is not NULL ; SELECT * FROM phone WHERE NOT price is NULL ; # 模糊查询 # select * from 表名 where 字段名 like '%值%';百分号代表匹配 SELECT * FROM phone WHERE price LIKE '4%'; SELECT * FROM phone WHERE price LIKE '%2%'; # select * from 表名 where 字段名 like '值_(_值)';下划线个数表示有多少个字符 SELECT * FROM phone WHERE jieshao LIKE '真___'; # 去除重复 (关键字 distinct)########################解决dos窗口下乱码问题(重启dos窗口后失效) set names 字符集(gbk);
排序查询 select * from 表名 order by 字段名 asc/desc(升序/降序); select * from phones order by jiage asc; select * from phones order by jiage desc; 分组查询 select * from 表名 group by 字段名 [having];(having中可以加条件) select * from phones group by pinpai having jiage >5000; having 和 where 的区别 having:如果有group by 只能在group by 后面使用 where 只能在group by 前面使用 在 group by 中 having 可以使用统计函数,where在分组中不可以使用统计函数 聚合查询 count(),sum(),max(),min(),avg() count() 求指定字段的值不为null的列数 sum() 求指定字段的所有数值的和,如果类型不是数值类型 结果为0 max() 求指定字段的最大值,类型是字符串类型,那么使用字符串排序运算 min() 求指定字段的最小值,类型是字符串类型,那么使用字符串排序运算 avg() 计算指定列的平均值,若果类型不是数值类型 结果为0 约束 非空约束+唯一约束=主键约束 (not null)+(unique)=(primary key) 从某种意义上来说!!! (not null 只有一种添加方式 (字段名 字段类型 not null)) 自增长 auto_increment 只对数值类型有效 添加主键约束的4种方式: 1:create table pk_1(id varchar(20) primary key ,name varchar(20)); 2:create table pk_2(id varchar(20),name varchar(20),primary key (id)); 3:create table pk_3(id varchar(20),name varchar(20),constraint 起个名字 primary key(id)); 4:create table pk_4(id varchar(20),name varchar(20)); alter table pk_4 add primary key(id); 删除主键约束 alter table pk_4 drop primary key; 删除唯一约束的方法 alter table drop index 字段名/constraint名; 多表操作 one2many 分主表,从表 需要在从表中添加一列能找到指定主表的映射,比如主键 添加外键的方式: 1:create table stu(sid varchar(20) primary key ,name varchar(20)); create table msg(mid varchar(20) primary key,english varchar(20),chinese varchar(20),math varchar(20),stu_id varchar(20)); alter table msg add constraint 名 foreign key (stu_id) references stu(sid); 2:create table stu(sid varchar(20) primary key ,name varchar(20)); create table msg(mid varchar(20) primary key,english varchar(20),chinese varchar(20),math varchar(20),stu_id varchar(20),constraint 名 foreign key(stu_id) reference stu(sid)); 删除/添加内容是,会受到外键的约束,在对主表进行删除操作,需要先把关联的外键处理掉,对从表进行添加操作,需要参照主表关联的列进行添加 many2many 两个主表,一个中间表 分别把两个表的唯一能区分数据的字段添加到中间表中------比较抽象... 多对多添加约束的方式: 1:create table teacher(tid varchar(20) primary key,name varchar(20)); create table student(sid varchar(20) primary key,name varchar(20)); create table zhong(teacher_id varchar(20),student_id varchar(20),foreign key (teacher_id) references teacher(tid),foreign key (student_id) references student(sid)); 2:create table teacher(tid varchar(20) primary key,name varchar(20)); create table student(sid varchar(20) primary key,name varchar(20)); create table zhong(teacher_id varchar(20),student_id varchar(20)); alter table zhong add foreign key (teacher_id) references teacher(tid); alter table zhong add foreign key (student_id) references student(sid); 注意:在删两个主表的数据时,要保证中间表的引用已经清除掉了! 联合主键(在many2many中可以解决数据重复问题,但是会极大降低程序效率) alter table 表名 add primary key(字段一,字段二);
MySQL数据库的常用操作
最新推荐文章于 2022-12-09 12:23:05 发布