1.SQL的语句顺序(理论)
SELECT [ALL|DISTINCT] <目标表达式>....
FROM <表名或者视图名>..
[WHERE <条件表达式>]
[GROUP BY <列名 1> [HAVING] <条件表达式>]
[ORDER BY <列名 2> [ASC|DESC]]
2.SQL数据库的选择命令
2.1 数据库的选择(实操)
作用 | 命令 |
---|---|
查看当前有哪些数据库 | show databases; |
选择数据库 | use database_name; |
查看当前使用的是哪个数据库 | select database(); |
新建数据库 | create database database_name; |
删除数据库 | drop database database_name; |
2.2 数据库的表格选择命令(实操)
作用 | 命令 |
---|---|
查看当前数据库有哪些表格 | show tables; |
在当前数据库新建表格 | create table table_name(字段名1 字段类型, 字段名2 字段类型); |
为当前数据库的表格插入数据 | insert into 表格名 values (‘字段名1的值’,字段名2的值,‘字段名3的值’); |
更新当前数据库某个表的数据 | update 表格名 set 字段名1=“值1” where 字段名1=“值2”; |
删除当前数据库某个表的数据 | delete from 表名 where name=“值1”; |
删除当前数据库的某个表格 | drop table table_name; |
3. 数据库建表约束条件(理论+说明)
作用 | 详细 | 说明 | 命令 |
---|---|---|---|
主键约束 | 单一主键 | 给某个字段添加约束,使得该字段不重复且不为空 | create table user( id int primary key, name varchar(4)); |
联合主键 | 多个字段加起来唯一 | create table user2( id int, name varchar(4), password varchar(20), primary key(id,name)); |
|
自增约束 | 控制某个值自动增长 | create table user3( id int primary key auto_increment, name varchar(4)); |
|
唯一约束 | 单一约束 | 约束字段的值不能重复 | create table user4( id int, name varchar(4) unique); |
联合唯一约束 | 多个字段加起来的值唯一 | create table user5( id int, name varchar(4), unique(id,name)); |
|
非空约束 | 非空约束 | 修饰字段的值不能为空 | create table user6( id int, name varchar(4) not null); |
默认约束 | 默认约束 | 当我们传入字段值的时候,如果没有传值,就会使用默认值 | create table user7( id int, name varchar(4), age int default 23); |
外键约束 | 外键约束 | 针对两张表:主表和附表,附表会参考主表的某个字段作为两张表的连接 | create table coutries( id int primary key, name varchar(10)); create table provinces( id int primary key, name varchar(10), country_id int, foreign key(country_id) references country(id)); |
修改约束 | 添加约束 | 为字段加上新的约束 | alter table user4 add primary key(id); |
修改约束 | 修改字段的约束(也可视作添加约束) | alter table user6 modify id int primary key auto_increment; | |
删除约束 | 删除约束 | 删除某个字段的约束 | alter table user3 drop primary key; |
4. 数据库的设计范式(理论+实例)
- 第一范式
数据表中的所有字段都是不可分割的原子值。字段值还可以继续拆分的,就不满足第一范式。-- 不满足第一范式 create table student2( id int primary key, name varchar(20), address varchar(30)); insert into student2 values(1,'卯月','中国四川省成都市武侯区武侯大道100号'); insert into student2 values(2,'竹秋','中国四川省成都市武侯区武侯大道90号'); insert into student2 values(3,'花朝','中国四川省成都市武侯区武侯大道80号'); -- 满足第一范式 create table student3( id int primary key auto_increment, name varchar(20), country varchar(20), province varchar(20), city varchar(20), street varchar(20), num varchar(10)); insert into student3 values(1,'卯月','中国','四川省','成都市','武侯区','武侯大道100号'); insert into student3 values(2,'竹秋','中国','四川省','成都市','武侯区','武侯大道90号'); insert into student3 values(3,'花朝','中国','四川省','成都市','武侯区','武侯大道80号');
- 第二范式
必须是满足第一范式的前提下,第二范式要求,除主键外的每一列都必须完全依赖于主键。如果要出现不完全依赖,只可能发生在联合主键的情况下。-- 不满足第二范式 create table myorder( product_id int, customer_id int, product_name varchar(20), customer_name varchar(20), primary key(product_id,customer_id)); -- 满足第二范式 -- order id 和 product_id,customer_id 拆分开,可以保证下面两个表里面的name满足第二范式 create table myorder( order_id int primary key, product_id int, customer_id int ); create table product( id int primary key, name varchar(20)); create table customer( id int primary key, name varchar(20));
- 第三范式
必须先满足第二范式,除开主键列的其他列之间不能有传递依赖关系。-- 不满足第三范式 create table myorder( order_id int primary key, product_id int, customer_id int, customer_phone varchar(11) ); # 错误,customer_phone可能还依赖于customer_id -- 满足第三范式 -- customer_phone 只和 customer表里面的id有关 create table myorder( order_id int primary key, product_id int, customer_id int ); create table customer( id int primary key, name varchar(20), customer_phone varchar(11));
- 注意
三大范式并不