MySQL基础
一、数据库的操作
1.SQL分类:
DDL(数据定义语言) :数据定义语言 - Data Definition Language,用来定义数据库的对象,如数据表、视图、索引等。常用指令:create drop alter truncate
DML(数据操作语言):数据处理语言 - Data Manipulation Language,在数据库表中更新,增加和删除记录。常用指令:update, insert, delete 不包含查询
DCL(数据控制语言) :数据控制语言 – Data Control Language,指用于设置用户权限和控制事务语句。常用指令:grant,revoke,if…else,while,begin transaction
DQL(数据查询语言) :数据查询语言 – Data Query Language,数据表记录的查询。常用指令:select
2.数据库操作语言:
2.1 查询当前所有的数据库: show databases;
2.2 查看数据库的编码: show create database 库名;
2.3 创建数据库
(1) create database 库名;:由于创建数据库的是后没有指定编码表,使用安装时默认的编码表
(2) create database 库名 character set 编码表名 ; 创建数据库,使用指定的编码表
(3) drop database 库名 ; 删除数据库
(4) alter database 库名 character set 编码集; 修改数据库编码集
(5) use 库名 ; 切换数据库
(6) select database() ; 查询当前正在使用的数据
2.4 数据表结构语句
create table 表名(
列名 数据类型, 列名 数据类型, …… 列名 数据类型 (最后一个列不需要逗号) );
注解:char 与vachar的区别?
char 的性能好。 varchar可以节省空间 ,通常时候,如果长度不固定,我们使用varchar
(1) show tables :查看该数据库的说有表
(2) show create table 表名 ; 查看建表语句
(3) desc 表名;查看表结构(表列)
(4) 主键约束: primary key auto_increment (主键自增)
注解:作用:设置某一个字段为主键,主键的特性是唯一(不能重复),并且不能为空。
一般使用一个没有任何意义的字段,比如id作为一个主键(没有意义就不需要修改)。
如果主键是一个int类型,还可以设置主键自增长。(即在插入记录的时候可以不用设置主键,让其自动以递增的形式添加)
一张表中只能有一个主键。
create table 表名 ( id int primary key auto_increment, name varchar(20), …………. );
(5) 唯一约束:
唯一约束:unique 内容不允许重复,可以为null(null不算重复)。
一个表里可以添加多个唯一约束。
写法: 列名 类型(长度) unique
【示例】
create table 表名 (
id int primary key auto_increment,
name varchar(20) unique,
………….
);
唯一约束和主键约束的区别
1、唯一约束可以是空(null)。 但是主键约束不能为空
2、一张表中只能有一个主键,但是唯一约束可以有多个
(6)非空约束
非空约束:not null 。不允许为空。 表示该列的内容不允许为空。 写法: 列名 类型(长度) not null, 【示例】 create table emp( id int primary key auto_increment, name varchar(20) unique, age int not null, …………. );
2.5 数据表结构的修改
(1) 增加一列 :alter table 表名 add 列名 类型(长度) 约束;
(2) 修改现有列: alter table 表名 modify 列名 类型 约束;
(3) 修改现有列名称: alter table 表名 change 旧列名 新列名 类型 约束;
(4) 删除现有列: alter table 表名 drop 列名
(5) 修改表名: rename table 旧表名 to 新表明
(6) 修改表的字符集: alter table 表名 character set 编码集
(7) 删除表 :drop table 表名
(8) 查看mysql服务的所有客户端和服务端使用的字符集:show variables like 'character%';
(9) 先删除表,在创建表: truncate table 表名;
(10) 事物:
start transaction;
commit (成功)
rollback (回滚)
2.6、一些常用:
select distinct 列名 from 表名 [ where 条件] 去重
ifnull(列名,默认值) 判断该列是否为null,如果为null,返回默认值,否则返回实际值。
round(数值,小数的位数) 实现四舍五入的结果
执行顺序:select …要显示的内容.. from …表名.. where 条件…. group by …分组的列 …having …分组后的条件… order by …排序 select …4… from …1.. where …2.. group by ..3…having ..5… order by ...6.
from 表名 where 条件: 逻辑运算符:and or not 比较运算符:< > <= >= <> = 在....之间:between...and... in(set):任意set集合中的一个条件成立即可 is null/is not null 模糊匹配:like % _ group by 列:对列进行分组。 having 条件: 逻辑运算符:and or not 比较运算符:< > <= >= <> = 在....之间:between...and... int(set) is null/is not null 模糊匹配:like % _ 聚合函数(sum,avg,max,min,count) 别名 order by desc/asc
数据备份: mysqldump -u 用户名 -p 数据库名 > 磁盘SQL文件路径
建表后添加外键约束: alter table 从表名称 add foreign key (外键列的名称) references 主表名称(主键)
建表时添加外键约束
/*创建部门表*/ create table dept( id int primary key auto_increment, name varchar(20) ); /*创建员工表*/ create table employee( id int primary key auto_increment, name varchar(20), age int , salary double, dept_id int, foreign key (dept_id) references dept(id) );