首先讲解一下常见的命令:
net start mysql57 (mysql57 是 服务名), 启动服务
net stop mysql57 关闭服务
mysql -uroot -p 根据用户名,密码登陆数据库 (root是用户名)
prompt mysql> 修改提示符
mySQL的默认端口号 3306
默认用户 root
MySQL语句的规范:
1. 关键字和函数名必须大写;
2. 数据库名称,表名称,字段名称 必须小写;
3. SQL语句必须以分号; 结尾
show databases
SHOW variables LIKE”%datadir%” 显示模糊查询为datadir的变量名称
SELECT VERSION(); 显示数据库的版本
SELECT USER(); 显示当前用户
SELECT NOW(); 显示当前时间
数据库创建,修改,删除语句
Create Database t1 Default Character set = GBK; // 创建一个数据库,编码方式为 GBK
Create Database t1 if exists t1 Default Character set = GBK; //根上面一句的区别是,如果创建的时候 t1 已经存在了,则不会出现错误,只是给出一个 warning
Alter Database t1 default Character set = utf-8; // 修改数据库的编码方式为 utf-8
Drop Database t1 if exists t1; // 删除数据库t1
创建的数据库名字为test, 数据表的创建为 user
// 首先进入数据库test
use test;
// 可以查询test中的所有表
show tables
// 创建一个表
create Table user(
id int,
name varchar(10),
age tinyint
);
// 为该表增加一个新的列
alter table user add salary float(8,2);
// 显示该表的所有列
show columns from user;
// 插入一行数据
insert user values(1,’wang’, 20, 100);
insert user values(1,’wang’); // 不能插入,当你没有在前面表明要插入的列时,必须要将全部数据补齐,否则插入失败
insert user(id, name, age, salary) values (2, ‘wang’, 20, 100);
//显示所有的数据
select * from user;
约束 作用: 保证数据的一致性和完整性, 实现一对一或者一对多的关系
约束分为列级约束, 表级约束
对一个数据列建立的约束,叫列级约束
对多个数据列建立的约束,叫表级约束
约束类型 :
not null , 非空约束
primary key , 主键约束
unique key, 唯一约束
default , 默认约束
foreign key, 外键约束
为表的字段添加不为空约束
create Table user(
id int not null, // 增加 id字段约束不为空
name varchar(10),
age tinyint
);
为表的字段 id 设置为自增型, 而且自增类型必须要与主键组合使用, 定义为主键
create Table user(
id int unsigned not null auto_increment primary key, // 增加 id字段约束不为空, 无符号整数, 自增, 主键
name varchar(10),
age tinyint
);
一个表只有一个主键, 主键保证记录的唯一性,主键自动不为null, 主键并不意味着只是一个列,可以是几个列的组合
为表的字段 name 设置唯一约束,可以保证记录的唯一性, 唯一约束的字段可以为空值,一张表可以存在多个唯一约束
create Table user(
id int unsigned not null auto_increment primary key, // 增加 id字段约束不为空, 无符号整数, 自增, 主键
name varchar(10) unique key
age tinyint
);
默认值: 当插入记录时,如果没有明确为字段赋值,则自动赋予默认值 default
外键约束
外键使用要求:
1.父表和子表使用相同的存储引擎 , 且只能为 innodb,禁止使用临时表
2. 外键列(字表) 和参照列(父表) 必须具有相似的数据类型,其中数字长度或者有无符号位必须相同, 字符的长度则可以不同
3. 外键列和参照列必须建立索引,如果外键列不存在索引,则mysql将自动创建索引, 但是参照列不存在索引,mysql不会为其自动创建索引
create table provience(
id tinyint unsigned auto_increment,
pname varchar(20) not null,
primary key (id)
);
create table city(
id tinyint unsigned auto_increment,
pname varchar(20) not null,
cityname varchar(20) not null,
foreign key (pname) references provence (pname),
primary key(id)
);
外键约束的几种权限: 这种约束是一种物理层次的约束,一般不建议使用(设置成no action或者 restrict),我们一般会设置逻辑层次的约束实现跟这个外键物理约束相同的功能,比如在父表的参照字段上建立触发器。 外键一般来说可以保证数据的一致性和完整性,但是有时会大大的降低效率,因为其要进行检查, 而且不易于后期维护修改,无法扩展(分库分表的时候,约束无法扩展), 所以可以将外键的约束交给程序来做。
cascade : 级联,从父表删除或者更新的话,会自动删除和更新子表中的匹配的行
Set null : 从父表中删除或者更新行,会将字表中匹配的行的外键列设置为 null, 如果要使用该选项,必须保证字表中的外键字段不能设置成not null。
restrict : 拒绝对父表的删除或者更新操作, 父表中的删除或者更新不影响字表中的列。
no action : 标准SQL语句,与mysql 中 的 restrict功能相同
// 创建表后为某一列添加约束
Alter Table user add constraint unique (id);