MySQL 基本操作(SQL)
SQL:
SQL 是用于访问和处理数据库的标准的计算机语言。
SQL语言规范
1 在数据库系统中,SQL语句不区分大小写,建议用大写
2 SQL语句可单行或多行书写,以“;”结尾
3 关键词不能跨多行或简写
4 用空格和缩进来提高语句的可读性
5 子句通常位于独立行,便于编辑,提高可读性
注释:
SQL标准:
-- 注释内容 单行注释,注意有空格
/*注释内容*/ 多行注释
MySQL注释:
注释内容
常用SQL操作指令
DDL: Data Defination Language 数据定义语言
CREATE,DROP,ALTER
DML: Data Manipulation Language 数据操作语言
INSERT,DELETE,UPDATE
DQL:Data Query Language 数据查询语言
SELECT
DCL:Data Control Language 数据控制语言
GRANT,REVOKE,COMMIT,ROLLBACK
库管理命令
创建数据库
create database db1;
create database IF NOT EXISTS db2 CHARACTER SET 'utf8';
修改数据库
ALTER DATABASE db1 character set utf8;
删除数据库
drop database db1;
查看数据库
show databases;
show create database db1;
切换数据库
use db2;
显示数据库中的表
show tables;
数据库命名规则
——可以使用数字/字母/下划线,但不能纯数字
——区分大小写,具有唯一性,不能重复
——不可使用指令关键字、特殊符号
表管理命令 DDL
创建表
新建指定名称的表
create table 库名.表名(
字段名1 字段类型(宽度) 约束条件,
字段名2 字段类型(宽度) 约束条件,
.. .. ..
字段名N 字段类型(宽度) 约束条件
);
创建一个存储用户信息的表,表字段为姓名、性别、爱好
mysql> create table user(
-> name char(10),
-> gender char(10),
-> hobby char(50)
-> );
也可以通过查询现存表创建和复制现存的表的表结构创建
查看表
查看支持的engine类型
SHOW ENGINES;
查看表:
SHOW TABLES [FROM db_name]
查看表结构:
DESC [db_name.]tb_name
SHOW COLUMNS FROM [db_name.]tb_name
查看表创建命令:
show create table student;
查看表状态:
SHOW TABLE STATUS LIKE 'tbl_name'
查看库中所有表状态
SHOW TABLE STATUS FROM db_name
修改和删除表
删除表
DROP TABLE [IF EXISTS] 'tbl_name';
修改表
ALTER TABLE 'tbl_name'
#字段:
#添加字段:add
ADD col1 data_type [FIRST|AFTER col_name]
#删除字段:drop
#修改字段:
alter(默认值), change(字段名), modify(字段属性)
查看修改表帮助
Help ALTER TABLE
RENAME TABLE `cc`.`test` TO `cc`.`test1`;
将test表修改为test1
记录管理命令DML
insert
INSERT tbl_name [(col1,...)] VALUES (val1,...), (val21,...) INSERT INTO `user` (`name`, `gender`, `hobby`) VALUES ('亚瑟', '男', '战士');
update
UPDATE student_tbl SET s_title='学习 C++' WHERE s_id=3;
注意:一定要有限制条件,否则将修改所有行的指定字段
可利用mysql 选项避免此错误:
mysql -U | --safe-updates| --i-am-a-dummy
[root@centos8 ~]#vim /etc/my.cnf
[mysql]
safe-updates
delete
DELETE FROM student_tbl WHERE s_id=3;
删除表中数据,但不会自动缩减数据文件的大小。
注意:一定要有限制条件,否则将清空表中的所有数据
如果想清空表,保留表结构,也可以使用下面语句,此语句会自动缩减数据文件的大小。
TRUNCATE TABLE tbl_name;
数据类型
数据类型
1 数据长什么样
2 数据需要多少空间存放
选择正确的数据类型对于获得高性能至关重要,三大原则
1 更小的通常更好,尽量使用可正确存储数据的最小数据类型
2 简单就好,简单数据类型的操作通常需要更少的CPU周期
3 尽量避免NULL,包含为Null的列,对MySQL更难优化
常见的信息种类:
| 数值型 | 字符型 | 枚举型 | 日期时间型 |
|---|---|---|---|
| 体重 | 姓名 | 爱好 | 出生时间 |
| 身高 | 地址 | 性别 | 注册时间 |
| 。。。 | 。。。 | 。。。 | 。。。 |
| 。 | 。 | 。 | 。 |
数值类型

create table tab2(age tinyint unsigned);
insert into tab2 (age) values (216);
insert into tab2 (age) values (256);
字符类型
枚举类型
1 ENUM:从给定值的集合中选择单个值
2 ——定义格式:enum(值1,值2,值N)
3
4 SET:从给定值集合中选择一个或多个值
5 ——定义格式:set(值1,值2,值N)
1 mysql>create table t3( name varchar(7), gender enum("man","woman"), hobby set("woman","game","movie","chat") );
2 mysql> insert into t3 (gender)values("c");
3 ERROR 1265 (01000): Data truncated for column 'gender' at row 1
4 mysql> insert into t3 (gender)values("man");
5 Query OK, 1 row affected (0.00 sec)
日期时间型

mysql> create table date(
name char(10),
gender enum("man","woman"),
height float(3.2),
weight tinyint unsigned,bust char(3),
hobby set("man","game","movie","chat"),
address varchar(100),
years year,
dates date,
times time);
Query OK, 0 rows affected (0.01 sec)
MySQL约束条件
约束条件
NULL 允许为空,默认设置
NOT NULL 不允许为空
Key 索引类型
Default 设置默认值,缺省为NULL
PRIMARY KEY 主键,所有记录中此字段的值不能重复,且不能为NULL
UNIQUE KEY 唯一键,所有记录中此字段的值不能重复,但可以为NULL
CHARACTER SET name 指定一个字符集
mysql> create table t1( name char(10) not null, gender enum("man","woman","no") default "no", age tinyintunsigned );
mysql> desc t1;
+--------+--------------------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+--------+--------------------------+------+-----+---------+-------+
| name | char(10) | NO | | NULL | |
| gender | enum('man','woman','no') | YES | | no | |
| age | tinyint(3) unsigned | YES | | NULL | |
+--------+--------------------------+------+-----+---------+-------+
3 rows in set (0.00 sec)
当不给默认字段赋值时,选择默认值
mysql> insert into t1(name) values("lw");
Query OK, 1 row affected (0.00 sec)
mysql> select * from t1;
+------+--------+------+
| name | gender | age |
+------+--------+------+
| lw | no | NULL |
+------+--------+------+
1 row in set (0.00 sec)
直接指定字符集
mysql> create table db1.t1(name varchar(10)) character set utf8;
Query OK, 0 rows affected (0.02 sec)
mysql> desc db1.t1;
+-------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| name | varchar(10) | YES | | NULL | |
+-------+-------------+------+-----+---------+-------+
1 row in set (0.00 sec)
MySQL修改表结构
添加新字段
alter table 表名 add 字段 类型 其它;
mysql> alter table t1 add hobby varchar(10);
Query OK, 0 rows affected (0.04 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> desc t1;
+--------+--------------------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+--------+--------------------------+------+-----+---------+-------+
| name | char(10) | NO | | NULL | |
| gender | enum('man','woman','no') | YES | | no | |
| age | tinyint(3) unsigned | YES | | NULL | |
| hobby | varchar(10) | YES | | NULL | |
+--------+--------------------------+------+-----+---------+-------+
4 rows in set (0.00 sec)
添加字段默认是添加到所有字段的结尾,如果要添加在首部需要使用first
mysql> alter table t1 add sex varchar(10) first;
Query OK, 0 rows affected (0.03 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> desc t1;
+--------+--------------------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+--------+--------------------------+------+-----+---------+-------+
| sex | varchar(10) | YES | | NULL | |
| name | char(10) | NO | | NULL | |
| gender | enum('man','woman','no') | YES | | no | |
| age | tinyint(3) unsigned | YES | | NULL | |
| hobby | varchar(10) | YES | | NULL | |
+--------+--------------------------+------+-----+---------+-------+
5 rows in set (0.00 sec)
也可添加在指定字段后面,比如添加到name后面使用after name
mysql> alter table t1 add info varchar(10) after name;
Query OK, 0 rows affected (0.03 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> desc t1;
+--------+--------------------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+--------+--------------------------+------+-----+---------+-------+
| sex | varchar(10) | YES | | NULL | |
| name | char(10) | NO | | NULL | |
| info | varchar(10) | YES | | NULL | |
| gender | enum('man','woman','no') | YES | | no | |
| age | tinyint(3) unsigned | YES | | NULL | |
| hobby | varchar(10) | YES | | NULL | |
+--------+--------------------------+------+-----+---------+-------+
6 rows in set (0.00 sec)
修改字段类型
基本用法
ALTER TABLE 表名
MODIFY 字段名 类型(宽度)约束条件;
可加 AFTER 字段名;
或者 FIRST;
注意事项:
1. 如果表中字段已经有值,修改的字段类型和字段里边的值不匹配,不允许修改
2. 需要修改的地方写新值,不需要修改的原样抄下来
mysql> alter table db1.t1 modify name int(4) unsigned not null;
Query OK, 0 rows affected (0.02 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> desc db1.t1;
+-------+-----------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+-----------------+------+-----+---------+-------+
| name | int(4) unsigned | NO | | NULL | |
+-------+-----------------+------+-----+---------+-------+
1 row in set (0.00 sec)
修改字段名
基本用法
ALTER TABLE 表名
CHANGE 原字段名 新字段名 类型(宽度) 约束条件;
修改字段名时,改变的写新的,不变的原样抄下来
修改字段名时也可修改字段类型和约束条件,但如果类型与约束条件与字段的值发生冲突时不允许修改
mysql> alter table db1.t1 change name age int(4);
Query OK, 0 rows affected (0.01 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql>
mysql>
mysql> desc db1.t1;
+-------+--------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+--------+------+-----+---------+-------+
| age | int(4) | YES | | NULL | |
+-------+--------+------+-----+---------+-------+
1 row in set (0.00 sec)
修改字段名时也可修改字段类型和约束条件,但如果类型与约束条件与字段的值发生冲突时不允许修改
mysql> select * from db1.t1;
+------+
| age |
+------+
| 20 |
+------+
1 row in set (0.00 sec)
mysql>
mysql>
mysql> alter table db1.t1 change age name varchar(4);
Query OK, 1 row affected (0.01 sec)
Records: 1 Duplicates: 0 Warnings: 0
mysql> select * from db1.t1;
+------+
| name |
+------+
| 20 |
+------+
1 row in set (0.00 sec)
mysql> alter table db1.t1 change name date date;
ERROR 1292 (22007): Incorrect date value: '20' for column 'date' at row 1
删除字段
ALTER TABLE 表名
DROP 字段名;
当字段中有多条值时,所有此字段的值都会被删除
mysql> desc db1.t1;
+-------+------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+------------+------+-----+---------+-------+
| name | varchar(4) | YES | | NULL | |
| age | int(4) | YES | | NULL | |
+-------+------------+------+-----+---------+-------+
2 rows in set (0.00 sec)
mysql> alter table db1.t1 drop age;
Query OK, 0 rows affected (0.03 sec)
Records: 0 Duplicates: 0 Warnings: 0
修改表名
基本用法
ALTER TABLE 表名
RENAME 新表名;
修改表名后,对应的表文件也会改变
mysql> alter table db1.t1 rename db1.t;
Query OK, 0 rows affected (0.00 sec)

