1130-1201总结
1130-1201总结
1130-1201总结
数据库名称的规范:
(1)、数据库的名称,由字母,数字,下划线,$ 组成
(2)、不要使用关键字作为数据库的名称
(3)、数据库的名称小写,而且尽量与项目名称保持一致
更多的规范,请参看《阿里巴巴编程规范》
创建数据库
create database 数据库名称 character set ‘utf8’;
修改数据库 alter database 数据库的名称 character set ‘新的编码集’;
删除数据库 drop database 数据库的名称;
创建表 create table 表的名字( ……………………..);
需要操作表 use 数据库的名称;
修改表名 alter table 原表名 rename to 新表名;
增加列 alter table 表名 add 列名 数据类型 [约束];
修改列名 alter table 表名 change 旧列名 新列名 数据类型 [约束];
删除列 alter table 表名 drop 列名;
删除表 drop table 表名;
创建主键列方式
第1种:直接在建表时添加
比如 id bigint primary key,
第2种:表已经存在,给表添加主键列
alter table 表名 add 主键列 数据类型 primary key;
第3种:表已经存在,而且主键列也存在
alter table 表名 add constraint 约束名 primary key(主键列);
三、外键约束
外键:外部连接的主键
外键约束:在外键列上,添加一种限制!限制该列的值,只能来自于 主表的值!
添加外键方式:
(1)、第1种方式
创建表的时候,添加外键约束
foreign key(外键列) references 主表名(主键列) [on delete cascade on update cascade]
举例说明:
CREATE TABLE dept_info(
id INT PRIMARY KEY,
dept_name VARCHAR(20)
);
CREATE TABLE teacher_info(
id VARCHAR(32) PRIMARY KEY,
teacher_name VARCHAR(20),
fk_dept_id INT,
FOREIGN KEY(fk_dept_id) REFERENCES dept_info(id)
);
cascade 级联
[on delete cascade on update cascade] 如果不加!
在删除主表时,MYSQL会自动检测该主键是否有被其他表引用过,如果有引用,不能删除!
如果加[on delete cascade on update cascade],删除/修改主表时,同时删除/修改所有的从表相关数据!
(2)、第2种方式
已经存在的表,添加外键约束
alter table 表名 add constraint 外键名 foreign key(外键列) references 主表(主键);
删除外键约束
alter table 表的表名 drop foreign key 外键约束的名称;
其它约束
一、非空约束
语法: 字段 数据类型 not null;
二、默认值约束三、唯一约束
字段 数据类型 default ‘默认值’;
三、唯一约束 限制某列的值不能重复
字段 数据类型 unique;
四、检查约束
检查约束:限制某列的值,只能是规定的值!
字段 set(‘刘备’,’曹操’,’孙权’);
五、自增长约束
在MySQL数据库中,主键完成自增长,那么其他列就不能自增长!
自增长约束:限制某列的值可以完成自增长!
字段 数据类型 auto_increment;
DML
DML:数据库操作语言,作用:完成对数据的新增,修改,删除
新增数据:
insert into 表的表名(字段列表) values (值的列表),(值的列表)……;
举例: 值要有单引号
INSERT INTO 三国志1(武将名,武力,智力,兵力,等级,君主) VALUES
(‘司马懿’,’42’,’98’,’120000’,’13’,’曹操’);
修改数据
update 表的表名 set 字段=’值’,字段=’值’,字段=’值’ where 修改条件
带条件修改,可以带多个
UPDATE 三国志1 SET 兵力=’25000’ WHERE 智力=’45’ AND 君主=’曹操’;
UPDATE 三国志1 SET 兵器=’丈八蛇矛’ WHERE 武将名=’张飞’;
不带条件,修改表中所有数据
UPDATE 三国志1 SET 体力=’150’;
删除数据
Delete删除
delete from 表名 where 删除条件;
DELETE FROM 三国志1 WHERE 武将名=’姜维’;
如果想一次性,将表中的数据都删除,不要加条件
Truncate删除=恢复出厂设置
truncate table 表名;
区别:
(1)、Delete 删除 是一行一行在删除,而且会记录日志
(2)、Truncate删除 属于重置型删除,不会记录日志
范式三约定
第一范式:列必须要保证原子性,一定要拆分到不可再拆为止
第二范式:在遵从第一范式的基础上,所有列都必须与主键相关!
第三范式:在遵从一,二范式的基础上,要求所有列都必须要跟主键有直接关系,而不是间接关系!
基础查询
select 字段列表 from 表名 where 查询条件;
SELECT 武将名 FROM 三国志1 WHERE 兵器=’青龙偃月刀’;
也可以并不带条件查询
SELECT FROM 三国志1 WHERE 武力 = ‘99’ OR 智力 = ‘98’;
SELECT FROM 三国志1 WHERE 武力 BETWEEN 99 AND 97;
模糊查询
1、使用%
%在后,以前面的字符为基准,向后匹配0-N个字符
2、使用_
_在后,以前面的字符为基准,向后匹配单个字符
(有多少个下划线, 就匹配多少个字符)
SELECT FROM 三国志1 WHERE 妻子 LIKE ‘貂%’;
去重查询
SELECT *DISTINCT 武力,智力,君主 FROM 三国志1;
四、排序查询
asc 升序
desc 降序
SELECT FROM 三国志1 WHERE 君主=’刘备’ ORDER BY 智力 DESC;
SELECT FROM 三国志1 WHERE 君主=’刘备’ ORDER BY 武力 DESC,等级 DESC;
五、非Null查询
SELECT FROM 三国志1 WHERE 兵器 IS NULL;
SELECT FROM 三国志1 WHERE 兵器 IS NOT NULL;
六、限制/分页查询
SELECT *FROM 三国志1 WHERE 武力 LIKE ‘9_’ ORDER BY 智力 ASC,兵力 ASC LIMIT 0,5;
聚合查询
总数
SELECT COUNT(武将名) FROM 三国志1 WHERE 武力 = ‘98’;//武将名非空的数据
SELECT COUNT() FROM 三国志1 WHERE 武力 = ‘98’;
SELECT COUNT() FROM 三国志1 WHERE 君主 = ‘刘备’ AND 武力 >= 95;
最大值
SELECT MAX(武力) FROM 三国志1 WHERE 君主 = ‘刘备’;
求和
SELECT SUM(兵力) FROM三国志1 WHERE 君主 = ‘刘备’;
平均数
SELECT AVG(武力) FROM 三国志1 WHERE 君主 = ‘曹操’;
当age为NULL时,avg()函数不会统计NULL数据
有时,又需要统计,解决方案:ifnull()函数
SELECT AVG(IFNULL(兵力,0)) FROM 三国志 WHERE 君主 = ‘孙权’;
保存到我的笔记
本内容不代表印象笔记立场
举报