MySQL
- 注释:代码中 ">>" 是表示代码开头,输入时请自动忽略.
登录
# 必须用小写,否则不过
>> mysql -u [用户名] -p [密码]
显示当前SQL版本、日期
# 显示当前版本
>> select version();
+-----------+
| version() |
+-----------+
| 5.7.25 |
+-----------+
1 row in set (0.00 sec)
# 显示当前日期
>> select current_date;
+--------------+
| current_date |
+--------------+
| 2019-04-17 |
+--------------+
1 row in set (0.00 sec)
显示所有数据库
>> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
| test |
+--------------------+
5 rows in set (0.00 sec)
创建数据库
>> create database Example;
Query OK, 1 row affected (0.00 sec)
>> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| Example |
| mysql |
| performance_schema |
| sys |
| test |
+--------------------+
# 删除数据库 (不在演示)
>> drop database [数据库名];
选择指定数据库、并且显示当前数据表
>> use Example;
Database changed
>> show tables;
Empty set (0.00 sec)
# 当前无数据表,需要新建
创建数据表、查询数据表结构
# 创建数据表"teacher",其中字段"name" 字符型 长度10,字段"age" 数字型 长度3, 字段"sex"枚举型 数据包含"男","女"
>> create table teacher(name char(10), age int(3), sex enum('男', '女'));
Query OK, 0 rows affected (0.02 sec)
# 查询数据表结构
>> describe teacher;
+-------+-------------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+-------------------+------+-----+---------+-------+
| name | char(10) | YES | | NULL | |
| age | int(3) | YES | | NULL | |
| sex | enum('男','女') | YES | | NULL | |
+-------+-------------------+------+-----+---------+-------+
3 rows in set (0.02 sec)
# describe 可以缩写成 desc,效果相同
数据类型
替换"name char(10)" 中 "char"
数据类型 | 分类 | 备注和说明 |
---|---|---|
BLOB | 二进制数据类型 | 存储非字符和文本,存储图像,视频、扫描文档,区分大小写 |
Char | 文本数据类型 | 固定长度的非Unicode字符数据,最多255个字符,带单引号 |
varchar | 文本数据类型 | 可变长度非Unicode数据,最多65535个,带单引号,按需分配存储空间 |
Text | 文本数据类型 | 存储长文本信息,可变长 |
Time | 日期和时间 | ‘hh:mm:ss’ |
Year | 日期和时间 | YYYY |
Date | 日期和时间 | 日期和时间在单引号内输入YYYY-MM-DD |
Datetime | 日期和时间 | ‘YYYY-MM-DD hh:mm:ss’ |
timestamp | 日期和时间 | 存最后被修改的时间,INSERT或UPDATE操作时记录日期和时间,'1970-01-01 00:00:00'到2037年 格式:‘YYYYMMDD hhmmss’ |
Int / smallint | 数值型数据 | 整数 |
Float(总位数,小数位)/ double (总位数,小数位) | 浮点型数据 | 单精度/双精度浮点数 |
Decimal | 货币数据类型 | 定点数,用于财务数据 |
Bit | 表示是/否的数据 | 存储布尔数据类型 |
Enum | 枚举型 | Xb enum(‘男’,‘女’)单选 Alter table xs1 add sex enum(‘男’,‘女’) not null; Creat table a1 sex enum(‘男’,‘女’); |
数据类型属性
附加在数据类型后,例如:"name char(10) not null ;"中的 "not null",表示该字段不能为空
MySQL关键字 | 含义 |
---|---|
NULL | 数据列可包含NULL值 |
NOT NULL | 数据列不允许包含NULL值,若指定not null,则必须在插入值时在此字段填入值。 |
DEFAULT xxx | 默认值,如果插入记录的时候没有指定值,将取这个默认值 |
PRIMARY KEY | 主键 |
AUTO_INCREMENT | 递增,如果插入记录的时候没有指定值,则在上一条记录的值上加1,仅适用于整数类型 |
UNSIGNED | 无符号 既为非负数,用此类型可以增加数据长度! unsigned 最大就可以到 127 * 2属性只针对整型,能用于浮点 |
CHARACTERSET name | 指定一个字符集 |
Binary | 只用于char 和varchar。 |
修改数据表结构
- 增加字段
# 增加字段"id",数值型,长度3,设置为主键"primary key",设置自动递增"auto_increment"
>> alter table teacher add id int(3) primary key auto_increment;
Query OK, 0 rows affected (0.02 sec)
Records: 0 Duplicates: 0 Warnings: 0
>> desc teacher;
+-------+-------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------+-------------------+------+-----+---------+----------------+
| name | char(10) | YES | | NULL | |
| age | int(3) | YES | | NULL | |
| sex | enum('男','女') | YES | | NULL | |
| id | int(3) | NO | PRI | NULL | auto_increment |
+-------+-------------------+------+-----+---------+----------------+
4 rows in set (0.00 sec)
- 修改字段"change"、"modify"
# 修改"teacher"数据表中"name"字段,名称、类型不变, 属性设置为非空.
>> alter table teacher change name name char(12) not null;
Query OK, 0 rows affected (0.03 sec)
Records: 0 Duplicates: 0 Warnings: 0
>> desc teacher;
+-------+-------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------+-------------------+------+-----+---------+----------------+
| name | char(12) | NO | | NULL | |
| age | int(3) | YES | | NULL | |
| sex | enum('男','女') | YES | | NULL | |
| id | int(3) | NO | PRI | NULL | auto_increment |
+-------+-------------------+------+-----+---------+----------------+
4 rows in set (0.00 sec)
# 修改字段属性时使用"modify", 修改"age"字段,长度4,非空.
>> alter table teacher modify age int(4) not null;
Query OK, 0 rows affected (0.02 sec)
Records: 0 Duplicates: 0 Warnings: 0
>> desc teacher;
+-------+-------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------+-------------------+------+-----+---------+----------------+
| name | char(12) | NO | | NULL | |
| age | int(4) | NO | | NULL | |
| sex | enum('男','女') | YES | | NULL | |
| id | int(3) | NO | PRI | NULL | auto_increment |
+-------+-------------------+------+-----+---------+----------------+
4 rows in set (0.00 sec)
- 删除字段
# 删除"teacher"数据表中 "age" 字段,不进行试验.
>> alter teable teacher drop age;
插入数据
# 插入一条"teacher"数据表数据,字段非别对应的是"name","age","sex"
>> insert into teacher(name, age, sex) values ('李华', 42, '女');
Query OK, 1 row affected (0.02 sec)
# 简单查询语句 查询"teacher"表中所有数据,"*"表示所有字段
>> select * from teacher;
+--------+-----+------+----+
| name | age | sex | id |
+--------+-----+------+----+
| 李华 | 42 | 女 | 1 |
+--------+-----+------+----+
1 row in set (0.00 sec)
# 批量插入数据
>> insert into teacher(name, age, sex) values ('赵丽霞', 37, '女'),('王国利', 34, '男');
Query OK, 2 rows affected (0.00 sec)
Records: 2 Duplicates: 0 Warnings: 0
>> select * from teacher;
+-----------+-----+------+----+
| name | age | sex | id |
+-----------+-----+------+----+
| 李华 | 42 | 女 | 1 |
| 赵丽霞 | 37 | 女 | 2 |
| 王国利 | 34 | 男 | 3 |
+-----------+-----+------+----+
3 rows in set (0.00 sec)
- 将"id"字段移动到首位
>> alter table teacher modify id int(4) auto_increment;
Query OK, 3 rows affected (0.04 sec)
Records: 3 Duplicates: 0 Warnings: 0
>> select * from teacher;
+----+-----------+-----+------+
| id | name | age | sex |
+----+-----------+-----+------+
| 1 | 李华 | 42 | 女 |
| 2 | 赵丽霞 | 37 | 女 |
| 3 | 王国利 | 34 | 男 |
+----+-----------+-----+------+
3 rows in set (0.00 sec)
SQL 语法
select语句(查询)
语法
- select 字段
指明查询结果中输出的内容 - from 表
指明查询数据来自哪个表或哪些表(单个或多个表) - where 筛选条件
指定查询条件或表间联系条件 - group by 分组字段 having 分组条件;
对查询结果进行分组 - order by 排序字段 asc(默认), desc
通常使用索引
实例
- select 姓名 from 学生成绩
- select * from 学生成绩
- select 姓名 from 基本情况
- select 姓名 from 基础情况 where 是否党员
- select distinct 入学成绩 form 学生成绩 where 入学成绩 == 290
- select distinct 班级 form 学生成绩
- select 姓名, 入学成绩 form 学生成绩 where 籍贯 in(‘山西’, ‘河南’, ‘山东’)
PS: 等同于 where 籍贯=‘山西’or 籍贯=‘河南’or 籍贯 = ‘山东’ - select * form 学生成绩 where 籍贯 like ‘山%’(或 like ‘山_’)
- select 基本情况.姓名, 数学 籍贯 from 基本情况, 学生成绩 where 基本情况.学号=学生成绩.学号
数据导出/导入
mysqldump工具主要是进行备份(导出)
shell:mysqldump -u root -p 数据库密码 数据库名称 > 具体备份路径
>> mysqldump -u root -p 123456 studentdata > home/root/studentdatabak.sql
本地数据库迁入(导入)
在本地系统中,两种方法。我觉得第二种更好。
- 方法一:
shell:mysql -u root -p
mysql>show databases;
mysql>CREATE DATABASENAME(即目标数据库,一般需要新建);
mysql>use DATABASENAME;
mysql>source 具体文件路径(即studentdatabak.sql);
- 方法二:
shell:mysql -u root -p
mysql>show databases;
mysql>CREATE DATABASENAME(即目标数据库,一般需要新建);
# 注意:新开一个终端
shell:mysqldump -u root -p 123456 studentdata < home/root/studentdatabak.sql