MySQL基础总结(一)
MySQL的基本操作和增删改语句
数据库基本介绍
基本概念
- SQL(Structure Query Language)结构化查询语言
- DQL(data query language)数据查询语言 select操作
- DML(data manipulation language)数据操作语言,主要是数据库增删改三种操作
- DDL(data defination language)数据库定义语言,主要是建表、删除表、修改表字段等操作
- DCL(data control language)数据库控制语言,如commit,revoke之类的,在默认状态下,只有sysadmin,dbcreator,db_owner或db_securityadmin等人员才有权力执行DCL
- TCL (transaction control language) 事务控制语言
基本操作
- windows mysql环境配置:
添加bin目录到系统变量(path)
- 登录mysql:
mysql -h localhost -P 3306 -u root -p
- 修改密码
set password for <用户名>@localhost = password('新密码');
- 显示数据库:
show databases;
- 使用数据库:
use <数据库名>;
-
查看数据库中的表名
- 这个需要先进入数据库
show tables;
- 这个不需要先进入数据库
show tables from <数据库名>
-
查看当前在哪个数据库:
select database();
-
查看当前MySQL的版本
- 在MySQL客户端中
select version();
- 在cmd/bash中
mysql --version
-
查看表结构:
desc <表名>;
-
语法规范:
- 不区分大小写,建议关键字大写,表名和列名小写
- 每条命令用 ; 结尾
- 每条命令根据需要可以进行缩进和换行
-
MySQL注释:
- 单行注释
# 单行注释
- 单行注释(注意 – 后面有个空格)
-- 单行注释
- 多行注释
/* 多行注释 多行注释 */
-
MySQL的其他注意事项
-
着重号 `` (注意这是TAB键上面的那个键,不是单引号)
`` 是着重号,在里面的内容表示一个字段,可以区分与关键字重名的字段
-
如果查询的字段或者别名中有空格或者特殊符号,加上 “”(建议)或’’
-
MySQL中的 + 只有运算功能,没有拼接功能,如果字符类型使用 + ,则尝试将字符型转换为数值类型
想要字符拼接功能,使用concat()函数
举例:
- 如果转换成功,则输出结果,如’100’+1输出101
- 如果转换失败,则将字符认为0,再做运算,如’abc’+1输出1
-
SQL语句中所有的索引都是从 1 开始,不是0
-
数值类型
整型
整数类型 | 字节 | 范围 |
---|---|---|
tinyint | 1 | 有符号: -27 ~ -27; 无符号: 0 ~ 28-1 |
smallint | 2 | 有符号: -215 ~ 215; 无符号: 0 ~ 216-1 |
mediumint | 3 | 有符号: -223 ~ 223; 无符号: 0 ~ 224-1 |
int/integer | 4 | 有符号: -231 ~ 231; 无符号: 0 ~ 232-1 |
bigint | 8 | 有符号: -263 ~ 263; 无符号: 0 ~ 264-1 |
注意
创建表格字段时,默认是有符号,如果想设为无符号,在后面加上unsigned
create table 表名(
id int #默认无符号
);
create table 表名(
id int unsigned #设置为无符号
)
如果超出器范围,会抛出异常,并显示该类型最大/小值(临界值),或者直接报错报错(至于抛出异常还是报错,与MySQL的版本有关)
int无符号默认值 11 ,有符号默认值 10
int 后面添加参数,不是指定的该int的数值长度,而是指定的其显示长度,但是如果只添加一个数字参数并没有效果,需要在创建表时再添加 zerofill ,但是如果添加了zerofill,默认是无符号数,不能指定有符号数
create table 表名(
id int(7) zerofill
);
浮点型
浮点数类型 | 字节 | 范围 |
---|---|---|
float | 4 | ±1.75494351E-38 ~ ±3.402823466E-38 |
double | 8 | ±2.2250738585072014E-308 ~ ±1.7976931348623157E308 |
- float
create table test(
num float[(m,d)]
)
注意
1. 长度为m,保留小数点后d位,如果超出位数,则四舍五入,如果范围超出指定的长度,就显示指定范围的临界值或者直接报错(至于抛出异常还是报错,与MySQL的版本有关)
2. (m,d) 可以省略,一般使用默认值即可
- double
create table test(
num double[(m,d)]
)
注意
1. 长度为5,保留小数点后2位,如果超出位数,则四舍五入,如果范围超出指定的长度,就显示指定范围的临界值或者直接报错(至于抛出异常还是报错,与MySQL的版本有关)
2. (m,d) 可以省略,一般使用默认值即可
定点型
定点数类型 | 字节 | 范围 |
---|---|---|
dec(M,D)/decimal(M,D) | M+2 | 最大值的范围与double相同,给定decimal的有效取值范围M和D决定 |
字符型
- 较短的字符型
- char
- varchar
- 较长的字符型
- text
- blob
DDL语言
创建/删除语句
- 创建数据库
create database [if not exists] <数据库名>;
- 创建表
create table [if exists] <表名>(
<列名1> <列名类型1> [(长度) 约束],
<列名2> <列名类型2> [(长度) 约束],
...
<列名n> <列名类型n> [(长度) 约束]
);
- 删除数据库
drop database [if exists] <数据库名>;
- 删除(销毁)表
drop table [if exists] <表名>;
-
复制表
- 复制表的结构,不复制内容
create table <新表名> like <旧表名>;
- 复制表的内容+数据,可以通过where语句复制部分符合条件的数据
create table <新表名> select * from <旧表名> [where 条件];
- 只复制表的部分字段
create table 新表名 select 字段1,字段2,... from 旧表名 where 恒不成立的条件(如0);
修改语句
- 修改列名
alter tabel <表名> change [column] <旧列名> <新列名> [新列名的类型(长度)];
注意
column
可加可不加,效果都是一样的,下同
- 修改列的类型或约束
alter table <表名> modify [column] <列名> <新列名的类型(长度)> [新列的约束条件]
- 添加列
alter table <表名> add [column] <新列名> <新列名的类型(长度)> [约束]
- 删除列
alter table <表名> drop [column] <列名>
DML语言
插入语句
语法 1
- 插入一行
insert into <表名>(<字段列表>) value(<值列表>);
- 插入多行
insert into <表名(<字段列表>) value(<值列表1>),(<值列表2>),(<值列表3>)...(<值列表n>);
注意
1. 插入的值要与字段类型一致或兼容
2. 非空字段必须插入值;可以为空的字段,可以设置为NULL,也可以直接不写
3. 列的顺序可以调换,但是要保证字段列表和值列表一一对应
4. 支持子查询,例如
insert into student(id,name,age,score) select '2','李四',18,90;
语法 2 插入指定字段
insert into <表名> set <字段名1>=<值1>,<字段名2>=<值2>...<字段名n>=<值n>
注意
1. 需要保证非空字段全部设置
2. 不支持一次性插入多行
3. 不支持子查询
更新语句
- 更新单个表
update 表名
set 字段名1=新值1,字段名2=新值2,...,新值n
where 条件;
- 更新多个表
update 表1 别名
inner|left|right join 表2 别名
on 连接条件
set 字段名1=值1,字段名2=值2...,字段名n=值n
where 条件;
删除语句
-
delete
- 删除符合条件的行
delete from <表名> where <条件>;
- 删除整张表的所有行
delete from <表名>;
-
truncate
truncate table <表名>
- drop
drop table [if exists] <表名>;
注意
1. delete是删除符合条件的行,不加条件默认是全部的行,不会删除整个表
2. truncate是删除整张表,相当于销毁了整个表格,然后创建一个一模一样的空表
3. drop是销毁表格,直接销毁表格释放空间,不会自动创建
3. 如果表有自增长的字段,使用delete删除后,再添加数据从自增正的断点开始,而truncate删除后自增长的字段从1开始
4. delete执行之后会返回数据(影响了几行数据),而truncate删除之后没有返回数据
5. elete删除之后可以回滚,truncate删除之后不能回滚
- 删除整张表的所有行
delete from <表名>;
- truncate
truncate table <表名>
- drop
drop table [if exists] <表名>;
注意
1. delete是删除符合条件的行,不加条件默认是全部的行,不会删除整个表
2. truncate是删除整张表,相当于销毁了整个表格,然后创建一个一模一样的空表
3. drop是销毁表格,直接销毁表格释放空间,不会自动创建
3. 如果表有自增长的字段,使用delete删除后,再添加数据从自增正的断点开始,而truncate删除后自增长的字段从1开始
4. delete执行之后会返回数据(影响了几行数据),而truncate删除之后没有返回数据
5. elete删除之后可以回滚,truncate删除之后不能回滚