MYSQL学习笔记(慕课网)

一、启动/关闭MYSQL服务

net start mysql

D:\>net start mysql
MySQL 服务正在启动 ..
MySQL 服务已经启动成功。

net stop mysql

C:\WINDOWS\system32>net stop mysql
MySQL 服务正在停止

二、登录和退出MYSQL


//登录方法1

D:\>mysql  -u root -p
Enter password: ********
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 2

//登录方法2
D:\>mysql  -u root -p -P3306 -h 127.0.0.1

C:\WINDOWS\system32>mysql -u root -p -P3306 -h 127.0.0.1
Enter password: ********
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 13
Server version: 5.7.22 MySQL Community Server (GPL)

//退出

mysql>exit;

mysql>quit;

mysql>\q;

三、修改提示符

prompt
D:\>mysql  -u root -p root -prompt  \h(服务器名称localhost)

mysql>prompt \h(服务器名称localhost);


MYSQL提示符
\D      完整的日期
\d        当前数据库
\h        服务器名称
\u        当前用户

\u@\h  \d>    
当前用户@服务器名称  当前数据库>

 

四、MYSQL常用命令和语法规范

1、显示当前服务器版本

mysql> SELECT VERSION();
+-----------+
| VERSION() |
+-----------+
| 5.7.22    |
+-----------+
1 row in set (0.12 sec)
 

2、显示当前日期时间

mysql> SELECT NOW();
+---------------------+
| NOW()               |
+---------------------+
| 2018-07-24 15:26:22 |
+---------------------+
1 row in set (0.05 sec)

3、显示当前用户

mysql> SELECT USER();
+----------------+
| USER()         |
+----------------+
| root@localhost |
+----------------+
1 row in set (0.03 sec)

4MySQL语句规范
1)、关键字与函数名称全部大写(小写可以执行,为了区分关键字)
2)、数据库名称、表名称、字段名称全部小写
3)、SQL语句必须以分号结尾

五、操作数据库


{}:必选项
[]:可选项

 

1、创建数据库

CREATE {DATABASE|SCHEMA} [IF NOT EXISTS] db_name 
  [DEFAULT] CHARACTER SET [=] charset_name

 
mysql> CREATE DATABASE t1;
Query OK, 1 row affected (0.07 sec)

//创建已存在的数据库
mysql> CREATE DATABASE t1;
ERROR 1007 (HY000): Can't create database 't1'; database exists
//显示错误信息
mysql> SHOW WARNINGS;
+-------+------+---------------------------------------------+
| Level | Code | Message                                     |
+-------+------+---------------------------------------------+
| Error | 1007 | Can't create database 't1'; database exists |
+-------+------+---------------------------------------------+
1 row in set (0.00 sec)

//显示数据库属性
mysql> SHOW CREATE DATABASE t1;
+----------+-------------------------------------------------------------+
| Database | Create Database                                             |
+----------+-------------------------------------------------------------+
| t1       | CREATE DATABASE `t1` /*!40100 DEFAULT CHARACTER SET utf8 */ |
+----------+-------------------------------------------------------------+
1 row in set (0.14 sec)

 

2、显示数据库列表

mysql> SHOW DATABASES;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| bluedot            |
| kdd                |
| mysql              |
| performance_schema |
| sys                |
| t1                 |
+--------------------+
7 rows in set (0.32 sec)

3、修改数据库

ALTER  {DATABASE|SCHEMA} [db_name]  
  [DEFAULT] CHARACTER SET [=] charset_name

//修改数据库t1的编码为gbk
mysql> ALTER DATABASE t1 CHARACTER SET = gbk;
Query OK, 1 row affected (0.18 sec)

mysql> SHOW CREATE DATABASE t1;
+----------+------------------------------------------------------------+
| Database | Create Database                                            |
+----------+------------------------------------------------------------+
| t1       | CREATE DATABASE `t1` /*!40100 DEFAULT CHARACTER SET gbk */ |
+----------+------------------------------------------------------------+
1 row in set (0.00 sec)

4、删除数据库

mysql> DROP DATABASE t1;
Query OK, 0 rows affected (1.32 sec)

mysql> SHOW DATABASES;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| bluedot            |
| kdd                |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
6 rows in set (0.00 sec)
 
//删除已经删除的数据库
mysql> DROP DATABASE t1;
ERROR 1008 (HY000): Can't drop database 't1'; database doesn't exist

mysql> SHOW WARNINGS;
+-------+------+--------------------------------------------------+
| Level | Code | Message                                          |
+-------+------+--------------------------------------------------+
| Error | 1008 | Can't drop database 't1'; database doesn't exist |
+-------+------+--------------------------------------------------+
1 row in set (0.00 sec)

六、数据类型

1、基本类型

整型int、浮点型float、双精度浮点 double
 

2、日期时间型

 

3、字符型

七、数据表的操作

1、创建数据表

打开数据库
USE 数据库名称;

mysql> USE t1;
Database changed

//显示打开的数据库
mysql> SELECT DATABASE();
+------------+
| DATABASE() |
+------------+
| t1         |
+------------+
1 row in set (0.00 sec)



 
//数据表应该事先考虑好
CREATE TABLE [IF NOT EXISTS] table_name(column_name data_type,...)
//数据表应该事先考虑好
CREATE TABLE [IF NOT EXISTS] table_name(column_name data_type,...)
mysql> CREATE TABLE tb1(
    -> username VARCHAR(20),
    -> age TINYINT UNSIGNED,
    -> salary FLOAT(8,2) UNSIGNED
    -> );
Query OK, 0 rows affected (0.68 sec)

 

 

2、查看数据表

mysql> SHOW TABLES;
+--------------+
| Tables_in_t1 |
+--------------+
| tb1          |
+--------------+
1 row in set (0.00 sec)

//查看数据库的数据表列表

mysql> SHOW TABLES FROM mysql;
+---------------------------+
| Tables_in_mysql           |
+---------------------------+
| columns_priv              |
| db                        |
| engine_cost               |
| event                     |
| func                      |
| general_log               |
| gtid_executed             |
| help_category             |
| help_keyword              |
| help_relation             |
| help_topic                |
| innodb_index_stats        |
| innodb_table_stats        |
| ndb_binlog_index          |
| plugin                    |
| proc                      |
| procs_priv                |
| proxies_priv              |
| server_cost               |
| servers                   |
| slave_master_info         |
| slave_relay_log_info      |
| slave_worker_info         |
| slow_log                  |
| tables_priv               |
| time_zone                 |
| time_zone_leap_second     |
| time_zone_name            |
| time_zone_transition      |
| time_zone_transition_type |
| user                      |
+---------------------------+
31 rows in set (0.00 sec)

 

3、查看数据表结构

mysql> SHOW COLUMNS FROM tb1;
+----------+---------------------+------+-----+---------+-------+
| Field    | Type                | Null | Key | Default | Extra |
+----------+---------------------+------+-----+---------+-------+
| username | varchar(20)         | YES  |     | NULL    |       |
| age      | tinyint(3) unsigned | YES  |     | NULL    |       |
| salary   | float(8,2) unsigned | YES  |     | NULL    |       |
+----------+---------------------+------+-----+---------+-------+
3 rows in set (0.01 sec)

4、记录(行)的插入和查找

插入数据
INSERT [INTO] table_name [(col_name,...)] VALUES(val,...)

//省略全部字段名,必须给全部字段赋值

mysql> INSERT tb1 VALUES('Tom',25,7819.25);
Query OK, 1 row affected (0.12 sec)

//否则,报错

mysql> INSERT tb1 VALUES('Tom',25);
ERROR 1136 (21S01): Column count doesn't match value count at row 1


//赋值部分字段

mysql> INSERT tb1(username,salary) VALUES('Tom',5600);
Query OK, 1 row affected (0.08 sec)

记录的查找
SELECT expr,... FROM table_name

//全部记录,*用来过滤字段

mysql> SELECT * FROM tb1;
+----------+------+---------+
| username | age  | salary  |
+----------+------+---------+
| Tom      |   25 | 7819.25 |
| Tom      | NULL | 5600.00 |
+----------+------+---------+
2 rows in set (0.00 sec)

5、空值和非空

NULL,字段值可以为空
NOT NULL,字段值不可以为空

mysql> CREATE TABLE tb2(
    -> username VARCHAR(20) NOT NULL,
    -> age TINYINT UNSIGNED NULL
    -> );
Query OK, 0 rows affected (0.47 sec)

//查看数据表属性

mysql> SHOW COLUMNS FROM tb2;
+----------+---------------------+------+-----+---------+-------+
| Field    | Type                | Null | Key | Default | Extra |
+----------+---------------------+------+-----+---------+-------+
| username | varchar(20)         | NO   |     | NULL    |       |
| age      | tinyint(3) unsigned | YES  |     | NULL    |       |
+----------+---------------------+------+-----+---------+-------+
2 rows in set (0.00 sec)

//插入空值

 
mysql> INSERT tb2 VALUES('Tom',NULL);
Query OK, 1 row affected (0.07 sec)

mysql> SELECT *FROM tb2;
+----------+------+
| username | age  |
+----------+------+
| Tom      | NULL |
+----------+------+
1 row in set (0.00 sec)

//错误测试
mysql> INSERT tb2 VALUES(NULL,26);
ERROR 1048 (23000): Column 'username' cannot be null

6、约束

主键约束:PRIMARY KEY

每一张数据表只能存在一个 主键
主键保证了记录的唯一性
主键自动为 NOT NULL

 
mysql> CREATE TABLE tb3(
    -> id SMALLINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    -> username VARCHAR(30) NOT NULL
    -> );
Query OK, 0 rows affected (0.57 sec)


mysql> SHOW COLUMNS FROM tb3;
+----------+----------------------+------+-----+---------+----------------+
| Field    | Type                 | Null | Key | Default | Extra          |
+----------+----------------------+------+-----+---------+----------------+
| id       | smallint(5) unsigned | NO   | PRI | NULL    | auto_increment |
| username | varchar(30)          | NO   |     | NULL    |                |
+----------+----------------------+------+-----+---------+----------------+
2 rows in set (0.00 sec)

 

唯一约束:UNIQUE KEY

唯一约束可以保证记录的唯一性
唯一约束的字段可以为空值(NULL)
每张数据表可以存在多个唯一约束

mysql> CREATE TABLE tb5(
    -> id SMALLINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    -> username VARCHAR(20) NOT NULL UNIQUE KEY,
    -> age TINYINT UNSIGNED
    -> );
Query OK, 0 rows affected (0.44 sec)

mysql> SHOW COLUMNS FROM tb5;
+----------+----------------------+------+-----+---------+----------------+
| Field    | Type                 | Null | Key | Default | Extra          |
+----------+----------------------+------+-----+---------+----------------+
| id       | smallint(5) unsigned | NO   | PRI | NULL    | auto_increment |
| username | varchar(20)          | NO   | UNI | NULL    |                |
| age      | tinyint(3) unsigned  | YES  |     | NULL    |                |
+----------+----------------------+------+-----+---------+----------------+
3 rows in set (0.01 sec)

mysql> INSERT tb5(username,age) VALUES('Tom',25);
Query OK, 1 row affected (0.09 sec)

//唯一约束
mysql> INSERT tb5(username,age) VALUES('Tom',22);
ERROR 1062 (23000): Duplicate entry 'Tom' for key 'username'

默认约束:DEFAULT

mysql> CREATE TABLE tb6(
    -> id SMALLINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    -> username VARCHAR(20) NOT NULL UNIQUE KEY,
    -> sex ENUM('1','2','3') DEFAULT '3'
    -> );
Query OK, 0 rows affected (0.56 sec)

mysql> SHOW COLUMNS FROM tb6;
+----------+----------------------+------+-----+---------+----------------+
| Field    | Type                 | Null | Key | Default | Extra          |
+----------+----------------------+------+-----+---------+----------------+
| id       | smallint(5) unsigned | NO   | PRI | NULL    | auto_increment |
| username | varchar(20)          | NO   | UNI | NULL    |                |
| sex      | enum('1','2','3')    | YES  |     | 3       |                |
+----------+----------------------+------+-----+---------+----------------+
3 rows in set (0.01 sec)

mysql> INSERT tb6(username) VALUES('Tom');
Query OK, 1 row affected (0.09 sec)

mysql> SELECT *FROM tb6;
+----+----------+------+
| id | username | sex  |
+----+----------+------+
|  1 | Tom      | 3    |
+----+----------+------+
1 row in set (0.00 sec)


7、自动编号

//自动编号  AUTO_INCREMENT

mysql> CREATE TABLE tb3(
    -> id SMALLINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    -> username VARCHAR(30)
    -> );
Query OK, 0 rows affected (0.38 sec)

mysql> INSERT tb3(username) VALUES('Tom');
Query OK, 1 row affected (0.10 sec)

mysql> INSERT tb3(username) VALUES('John');
Query OK, 1 row affected (0.10 sec)

mysql> INSERT tb3(username) VALUES('Rose');
Query OK, 1 row affected (0.10 sec)

mysql> INSERT tb3(username) VALUES('Dimitar');
Query OK, 1 row affected (0.10 sec)

mysql> SELECT *FROM tb3;
+----+----------+
| id | username |
+----+----------+
|  1 | Tom      |
|  2 | John     |
|  3 | Rose     |
|  4 | Dimitar  |
+----+----------+
4 rows in set (0.00 sec)

 

//非自动编号

mysql> CREATE TABLE tb4(
    -> id SMALLINT UNSIGNED PRIMARY KEY,
    -> username VARCHAR(30)
    -> );
Query OK, 0 rows affected (0.38 sec)

mysql> SHOW COLUMNS FROM tb4;
+----------+----------------------+------+-----+---------+-------+
| Field    | Type                 | Null | Key | Default | Extra |
+----------+----------------------+------+-----+---------+-------+
| id       | smallint(5) unsigned | NO   | PRI | NULL    |       |
| username | varchar(30)          | YES  |     | NULL    |       |
+----------+----------------------+------+-----+---------+-------+
2 rows in set (0.00 sec)


mysql> INSERT tb4 VALUES(22,'Tom');
Query OK, 1 row affected (0.16 sec)

mysql> INSERT tb4 VALUES(4,'John');
Query OK, 1 row affected (0.10 sec)


mysql> SELECT *FROM tb4;
+----+----------+
| id | username |
+----+----------+
| 22 | Tom      |
| 4  | John     |
+----+----------+
2 rows in set (0.00 sec)

八、约束和修改数据表

1)、约束保证了数据的完整性和一致性
2)、约束分为表级约束和列级约束
3)、约束的类型包括:
    NOT NULL(非空约束)     PRIMARY KEY(主键约束)    UNIQUE KEY(唯一约束)    
    DEFAUT(默认约束)    FOREIIGN KEY(外键约束)

1、外键约束:FOREIIGN KEY

保证数据一致性
实现一对一一对多关系

外键约束要求:
1)、父表和字表必须具有相同的存储引擎,禁止使用临时表
2)、数据表的存储引擎只能为InnoDB
3)、外键列和参照列必须具有相似的数据类型。其中数字的长度或是否有符号位必须相同,而字符的长度可以不同
4)、外键列和参照列必须创建索引。如果外键列不存在索引的话,MYSQL将自动创建索引

编辑数据表的默认存储 引擎
MYSQL配置文件
# 创建新表时将使用的默认存储引擎
default-storage-engine=INNODB

2、外键约束的参照操作

1)、CASCADE:从父表删除和更新且自动更新子表中匹配的行
2)、SET NULL:从父表删除和更新行,并设置子表中的外键列为NULL。如果使用该选项,必须保证子表列没有指定NOT NULL
3)、RESTRICT:拒绝对父表的删除或更新操作
4)、NO ACTION:标准SQL的关键字,在MYSQL中与RESTRICT相同

mysql> CREATE TABLE province(

    -> id SMALLINT UNSIGNED PRIMARY KEY AUTO_INCREMENT,

    -> pname VARCHAR(20) NOT NULL

    -> );

Query OK, 0 rows affected (0.69 sec)

 

//外键类型需要与父表的相同

mysql> CREATE TABLE users(

    -> id SMALLINT UNSIGNED PRIMARY KEY AUTO_INCREMENT,

    -> username VARCHAR(10) NOT NULL,

    -> pid SMALLINT ,FOREIGN KEY(pid) REFERENCES province(id)

    -> );

ERROR 1215 (HY000): Cannot add foreign key constraint



mysql> CREATE TABLE users(

    -> id SMALLINT UNSIGNED PRIMARY KEY AUTO_INCREMENT,

    -> username VARCHAR(10) NOT NULL,

    -> pid SMALLINT UNSIGNED ,FOREIGN KEY(pid) REFERENCES province(id)

    -> );

Query OK, 0 rows affected (0.47 sec)

 

//CASCADE举例

mysql> CREATE TABLE users1(

    -> id SMALLINT UNSIGNED PRIMARY KEY AUTO_INCREMENT,

    -> username VARCHAR(10) NOT NULL,

    -> pid SMALLINT UNSIGNED ,FOREIGN KEY(pid) REFERENCES province(id) ON DELETE CASCADE

    -> );

Query OK, 0 rows affected (0.56 sec)



mysql> INSERT province(pname) VALUES('A');

Query OK, 1 row affected (0.14 sec)



mysql> INSERT province(pname) VALUES('B');

Query OK, 1 row affected (0.09 sec)



mysql> INSERT province(pname) VALUES('C');

Query OK, 1 row affected (0.09 sec)



mysql> SELECT *FROM province;

+----+-------+

| id | pname |

+----+-------+

|  1 | A     |

|  2 | B     |

|  3 | C     |

+----+-------+

3 rows in set (0.06 sec)



mysql> INSERT users1(username,pid) VALUES('TOM',3);

Query OK, 1 row affected (0.09 sec)



mysql> INSERT users1(username,pid) VALUES('JOHN',2);

Query OK, 1 row affected (0.09 sec)



mysql> INSERT users1(username,pid) VALUES('HN',3);

Query OK, 1 row affected (0.10 sec)



mysql> SELECT *FROM users1;

+----+----------+------+

| id | username | pid  |

+----+----------+------+

|  1 | TOM      |    3 |

|  2 | JOHN     |    2 |

|  3 | HN       |    3 |

+----+----------+------+

3 rows in set (0.00 sec)



mysql> DELETE FROM province WHERE id = 3;

Query OK, 1 row affected (0.15 sec)



mysql> SELECT *FROM users1;

+----+----------+------+

| id | username | pid  |

+----+----------+------+

|  2 | JOHN     |    2 |

+----+----------+------+

1 row in set (0.00 sec)

3、表级约束和列级约束

列级约束:对一个数据列建立的约束

表级约束:对多个数据列建立的约束

不是所有的约束都存在列级和表级约束

4、修改数据表

1)添加单列

ALTER TABLE table_name ADD [COLUMN] column_name column_definition

[FIRST | AFTER column_name]

FIRST:添加的列在最前方

AFTER column_name:添加的列在column_name后面

默认在最后一列


 

mysql> ALTER TABLE users1 ADD age TINYINT UNSIGNED NOT NULL DEFAULT 10;

Query OK, 0 rows affected (1.21 sec)

Records: 0  Duplicates: 0  Warnings: 0



mysql> SHOW COLUMNS FROM users1;

+----------+----------------------+------+-----+---------+----------------+

| Field    | Type                 | Null | Key | Default | Extra          |

+----------+----------------------+------+-----+---------+----------------+

| id       | smallint(5) unsigned | NO   | PRI | NULL    | auto_increment |

| username | varchar(10)          | NO   |     | NULL    |                |

| pid      | smallint(5) unsigned | YES  | MUL | NULL    |                |

| age      | tinyint(3) unsigned  | NO   |     | 10      |                |

+----------+----------------------+------+-----+---------+----------------+

4 rows in set (0.07 sec)





mysql> ALTER TABLE users1 ADD password VARCHAR(20) NOT NULL AFTER username;

Query OK, 0 rows affected (1.41 sec)

Records: 0  Duplicates: 0  Warnings: 0



mysql> SHOW COLUMNS FROM users1;

+----------+----------------------+------+-----+---------+----------------+

| Field    | Type                 | Null | Key | Default | Extra          |

+----------+----------------------+------+-----+---------+----------------+

| id       | smallint(5) unsigned | NO   | PRI | NULL    | auto_increment |

| username | varchar(10)          | NO   |     | NULL    |                |

| password | varchar(20)          | NO   |     | NULL    |                |

| pid      | smallint(5) unsigned | YES  | MUL | NULL    |                |

| age      | tinyint(3) unsigned  | NO   |     | 10      |                |

+----------+----------------------+------+-----+---------+----------------+

5 rows in set (0.00 sec)

2)添加多列

ALTER TABLE table_name ADD [COMLUM]

(column_name column_definition,...)

 

3)删除列

ALTER TABLE table_name DROP column_name

ALTER TABLE table_name DROP column_name,...

mysql> ALTER TABLE users1 DROP username;

Query OK, 0 rows affected (1.27 sec)

Records: 0  Duplicates: 0  Warnings: 0



mysql> SHOW COLUMNS FROM users1;

+----------+----------------------+------+-----+---------+----------------+

| Field    | Type                 | Null | Key | Default | Extra          |

+----------+----------------------+------+-----+---------+----------------+

| id       | smallint(5) unsigned | NO   | PRI | NULL    | auto_increment |

| password | varchar(20)          | NO   |     | NULL    |                |

| pid      | smallint(5) unsigned | YES  | MUL | NULL    |                |

| age      | tinyint(3) unsigned  | NO   |     | 10      |                |

+----------+----------------------+------+-----+---------+----------------+

4 rows in set (0.00 sec)



mysql> ALTER TABLE users1 DROP password,DROP age;

Query OK, 0 rows affected (1.40 sec)

Records: 0  Duplicates: 0  Warnings: 0



mysql> SHOW COLUMNS FROM users1;

+-------+----------------------+------+-----+---------+----------------+

| Field | Type                 | Null | Key | Default | Extra          |

+-------+----------------------+------+-----+---------+----------------+

| id    | smallint(5) unsigned | NO   | PRI | NULL    | auto_increment |

| pid   | smallint(5) unsigned | YES  | MUL | NULL    |                |

+-------+----------------------+------+-----+---------+----------------+

2 rows in set (0.00 sec)

4)添加主键约束

ALTER TABLE table_name ADD [CONSTRAINT [symbol]] PRIMARY KEY

[index_type](index_col_name,...)

 

5)添加唯一约束

ALTER TABLE table_name ADD [CONSTRAINT [symbol]] UNIQUE

[INDEX|KEY][index_name][index_type](index_col_name,...)

 

6)添加外键约束

ALTER TABLE table_name ADD [CONSTRAINT [symbol]] FOREIGN KEY

[INDEX|KEY][index_name](index_col_name,...)

reference_definition

 

7)添加/删除默认约束

ALTER TABLE table_name ALTER [COLUMN] col_name

{SET DEFAULT literal|DROP DEFAULT}

 

 

8)删除主键约束

ALTER TABLE table_name DROP PRIMARY KEY;

 

9)删除唯一约束

ALTER TABLE table_name DROP INDEX {INDEX|KEY}index_name;

 

10)删除外键约束

ALTER TABLE table_name DROP FOREIGN KEY fk_symbol

 

11)修改列定义

ALTER TABLE table_name MODIEY [COLUMN]old_col_name new_col_name

column_definition [FIRST|AFTER col_name]

 

12)数据表更名

方法1:ALTER TABLE table_name RENAME [TO|AS] new_table_name

方法2:RENAME TABLE table_name TO new_table_name

 

九、记录的操作

1、插入记录

方法1:

INSERT [INTO] table_name [col_name,...] {VALUES|VALUE}({expr|DEFAULT},...),(...),...

mysql> CREATE TABLE users(

    -> id SMALLINT UNSIGNED PRIMARY KEY AUTO_INCREMENT,

    -> username VARCHAR(20) NOT NULL,

    -> password VARCHAR(20) NOT NULL,

    -> age TINYINT UNSIGNED NOT NULL DEFAULT 10,

    -> sex BOOLEAN

    -> );

Query OK, 0 rows affected (0.46 sec)



mysql> INSERT users VALUES(NULL,'Tom','123',20,1);

Query OK, 1 row affected (0.14 sec)



mysql> select *from users;

+----+----------+----------+-----+------+

| id | username | password | age | sex  |

+----+----------+----------+-----+------+

|  1 | Tom      | 123      |  20 |    1 |

+----+----------+----------+-----+------+

1 row in set (0.00 sec)



mysql> INSERT users VALUES(NULL,'John','123',19,1);

Query OK, 1 row affected (0.09 sec)



mysql> select *from users;

+----+----------+----------+-----+------+

| id | username | password | age | sex  |

+----+----------+----------+-----+------+

|  1 | Tom      | 123      |  20 |    1 |

|  2 | John     | 123      |  19 |    1 |

+----+----------+----------+-----+------+

2 rows in set (0.00 sec)



mysql> INSERT users VALUES(NULL,'Tom','123',20,1);

Query OK, 1 row affected (0.04 sec)



mysql> select *from users;

+----+----------+----------+-----+------+

| id | username | password | age | sex  |

+----+----------+----------+-----+------+

|  1 | Tom      | 123      |  20 |    1 |

|  2 | John     | 123      |  19 |    1 |

|  3 | Tom      | 123      |  20 |    1 |

+----+----------+----------+-----+------+

3 rows in set (0.00 sec)

 

//使用默认值

mysql> INSERT users VALUES(NULL,'Tom','123',DEFAULT,1);

Query OK, 1 row affected (0.09 sec)



mysql> select *from users;

+----+----------+----------+-----+------+

| id | username | password | age | sex  |

+----+----------+----------+-----+------+

|  1 | Tom      | 123      |  20 |    1 |

|  2 | John     | 123      |  19 |    1 |

|  3 | Tom      | 123      |  20 |    1 |

|  4 | Tom      | 123      |  10 |    1 |

+----+----------+----------+-----+------+

4 rows in set (0.00 sec)

 

//多行赋值

mysql> INSERT users VALUES(NULL,'Tim','123',20,1),(NULL,'Rose','123',20,1)

    -> ;

Query OK, 2 rows affected (0.09 sec)

Records: 2  Duplicates: 0  Warnings: 0



mysql> select *from users;

+----+----------+----------+-----+------+

| id | username | password | age | sex  |

+----+----------+----------+-----+------+

|  1 | Tom      | 123      |  20 |    1 |

|  2 | John     | 123      |  19 |    1 |

|  3 | Tom      | 123      |  20 |    1 |

|  4 | Tom      | 123      |  10 |    1 |

|  5 | Tim      | 123      |  20 |    1 |

|  6 | Rose     | 123      |  20 |    1 |

+----+----------+----------+-----+------+

6 rows in set (0.00 sec)

 

方法2(使用较少):

INSERT [INTO] table_name SET col_name={expr|DEFAULT},...

说明:与第一种方式的区别在于,此方法可以使用子查询(SubQuery)

mysql> INSERT users SET username = 'Ben',password = '123';

Query OK, 1 row affected (0.06 sec)



mysql> select *from users;

+----+----------+----------+-----+------+

| id | username | password | age | sex  |

+----+----------+----------+-----+------+

|  1 | Tom      | 123      |  20 |    1 |

|  2 | John     | 123      |  19 |    1 |

|  3 | Tom      | 123      |  20 |    1 |

|  4 | Tom      | 123      |  10 |    1 |

|  5 | Tim      | 123      |  20 |    1 |

|  6 | Rose     | 123      |  20 |    1 |

|  7 | Ben      | 123      |  10 | NULL |

+----+----------+----------+-----+------+

7 rows in set (0.00 sec)

方法3:

INSERT [INTO] table_name[(col_name),...] SELECT ...

说明:此方法可以将查询结果插入到指定的数据表

 

 

2、更新记录

单表更新

UPDATE[LOW_PRIORITY][IGNORE]table_reference SET col_name1={expr1|DEFAULT}

[,col_name2={expr2|DEFAULT}]...[WHERE where_condition]

 

//省略条件,更新全部数据

mysql> UPDATE users set age = age + 5;

Query OK, 7 rows affected (0.12 sec)

Rows matched: 7  Changed: 7  Warnings: 0



mysql> select *from users;

+----+----------+----------+-----+------+

| id | username | password | age | sex  |

+----+----------+----------+-----+------+

|  1 | Tom      | 123      |  25 |    1 |

|  2 | John     | 123      |  24 |    1 |

|  3 | Tom      | 123      |  25 |    1 |

|  4 | Tom      | 123      |  15 |    1 |

|  5 | Tim      | 123      |  25 |    1 |

|  6 | Rose     | 123      |  25 |    1 |

|  7 | Ben      | 123      |  15 | NULL |

+----+----------+----------+-----+------+

7 rows in set (0.00 sec)

 

//多字段更新

mysql> UPDATE users set age = age - id,sex = 0;

Query OK, 7 rows affected (0.09 sec)

Rows matched: 7  Changed: 7  Warnings: 0



mysql> select *from users;

+----+----------+----------+-----+------+

| id | username | password | age | sex  |

+----+----------+----------+-----+------+

|  1 | Tom      | 123      |  24 |    0 |

|  2 | John     | 123      |  22 |    0 |

|  3 | Tom      | 123      |  22 |    0 |

|  4 | Tom      | 123      |  11 |    0 |

|  5 | Tim      | 123      |  20 |    0 |

|  6 | Rose     | 123      |  19 |    0 |

|  7 | Ben      | 123      |   8 |    0 |

+----+----------+----------+-----+------+

7 rows in set (0.00 sec)

 

//条件更新

mysql> UPDATE users set age = age + 10 WHERE id%2=0;

Query OK, 3 rows affected (0.09 sec)

Rows matched: 3  Changed: 3  Warnings: 0



mysql> select *from users;

+----+----------+----------+-----+------+

| id | username | password | age | sex  |

+----+----------+----------+-----+------+

|  1 | Tom      | 123      |  24 |    0 |

|  2 | John     | 123      |  32 |    0 |

|  3 | Tom      | 123      |  22 |    0 |

|  4 | Tom      | 123      |  21 |    0 |

|  5 | Tim      | 123      |  20 |    0 |

|  6 | Rose     | 123      |  29 |    0 |

|  7 | Ben      | 123      |   8 |    0 |

+----+----------+----------+-----+------+

7 rows in set (0.00 sec)

 

3、删除记录

单表:

DELETE FROM table_name [WHERE where_condition]


 

mysql> DELETE FROM users WHERE id = 6;

Query OK, 1 row affected (0.06 sec)



mysql> select *from users;

+----+----------+----------+-----+------+

| id | username | password | age | sex  |

+----+----------+----------+-----+------+

|  1 | Tom      | 123      |  24 |    0 |

|  2 | John     | 123      |  32 |    0 |

|  3 | Tom      | 123      |  22 |    0 |

|  4 | Tom      | 123      |  21 |    0 |

|  5 | Tim      | 123      |  20 |    0 |

|  7 | Ben      | 123      |   8 |    0 |

+----+----------+----------+-----+------+

6 rows in set (0.00 sec)

 

4、查询表达式解析

 

查找记录

SELECT select_expr [,select_expr...]

[

  FROM table_references

  [WHERE where_condition]

  [GROUP BY{col_name|position}[ASC|DESC],...]

  [HAVING where_condition]

  [ORDER BY{col_name|expr|position}[ASC|DESC],...]

  [LIMIT{[offset,]row_count|row_count OFFSET offset}]

]

mysql> SELECT 3+5;

+-----+

| 3+5 |

+-----+

|   8 |

+-----+

1 row in set (0.00 sec)



mysql> SELECT username,id FROM users;

+----------+----+

| username | id |

+----------+----+

| Tom      |  1 |

| John     |  2 |

| Tom      |  3 |

| Tom      |  4 |

| Tim      |  5 |

| Ben      |  7 |

+----------+----+

6 rows in set (0.00 sec)

 

查询表达式

每一个表达式表示想要的一列,必须有至少一个

多列之间以英文逗号

星号(*)表示所有列。table_name.*可以表示命名表的所有列

查询表达式可以使用[AS]alias_name为其赋予别名

别名可用与GROUP BY,ORDER BY或HAVING子句

 

 

5、条件表达式

 

对记录进行过滤,如果没有指定WHERE子句,则显示所有记录。

在WHERE表达式中,可以使用MYSQL支持的函数或运算符

 

6、查询结果分组GROUP BY

[GROUP BY{col_name|position}[ASC|DESC],...]

mysql> SELECT sex FROM users GROUP BY sex;

+------+

| sex  |

+------+

|    0 |

+------+

1 row in set (0.05 sec)

 

7、分组条件

[HAVING where_condition]

mysql> SELECT age FROM users GROUP BY age HAVING age >22;

+-----+

| age |

+-----+

|  24 |

|  32 |

+-----+

2 rows in set (0.00 sec)

 

十、子查询和连接

子查询是指在另一个查询语句中的SELECT子句。

  例句:

  SELECT * FROM t1 WHERE column1 = (SELECT column1 FROM t2);

  其中,SELECT * FROM t1 ...称为Outer Query[外查询](或者Outer Statement),

  SELECT column1 FROM t2 称为Sub Query[子查询]。

  所以,我们说子查询是嵌套在外查询内部。而事实上它有可能在子查询内部再嵌套子查询。

 

  子查询必须出现在圆括号之间。

 

 

1、使用比较运算符的子查询

运算符:=、>、<、<=、>=、<>、!=、<=>

语法结构:operand comparisor_operator subquery


 

mysql> SELECT AVG(goods_price) FROM tdb_goods;

+------------------+

| AVG(goods_price) |

+------------------+

|     5636.3636364 |

+------------------+

1 row in set (0.01 sec)



mysql> SELECT ROUND(AVG(goods_price),2) FROM tdb_goods;

+---------------------------+

| ROUND(AVG(goods_price),2) |

+---------------------------+

|                   5636.36 |

+---------------------------+

1 row in set (0.00 sec)



mysql> SELECT goods_id,goods_name,goods_price FROM tdb_goods WHERE goods_price >=5636.36;

+----------+-----------------------------------------+-------------+

| goods_id | goods_name                              | goods_price |

+----------+-----------------------------------------+-------------+

|        3 | G150TH 15.6英寸游戏本                   |    8499.000 |

|        7 | SVP13226SCB 13.3英寸触控超极本          |    7999.000 |

|       13 | iMac ME086CH/A 21.5英寸一体电脑         |    9188.000 |

|       17 | Mac Pro MD878CH/A 专业级台式电脑        |   28888.000 |

|       18 |  HMZ-T3W 头戴显示设备                   |    6999.000 |

|       20 | X3250 M4机架式服务器 2583i14            |    6888.000 |

|       21 |  HMZ-T3W 头戴显示设备                   |    6999.000 |

+----------+-----------------------------------------+-------------+

7 rows in set (0.00 sec)



mysql> SELECT goods_id,goods_name,goods_price FROM tdb_goods WHERE goods_price >=(SELECT ROUND(AVG(goods_price),2) FROM tdb_goods);

+----------+-----------------------------------------+-------------+

| goods_id | goods_name                              | goods_price |

+----------+-----------------------------------------+-------------+

|        3 | G150TH 15.6英寸游戏本                   |    8499.000 |

|        7 | SVP13226SCB 13.3英寸触控超极本          |    7999.000 |

|       13 | iMac ME086CH/A 21.5英寸一体电脑         |    9188.000 |

|       17 | Mac Pro MD878CH/A 专业级台式电脑        |   28888.000 |

|       18 |  HMZ-T3W 头戴显示设备                   |    6999.000 |

|       20 | X3250 M4机架式服务器 2583i14            |    6888.000 |

|       21 |  HMZ-T3W 头戴显示设备                   |    6999.000 |

+----------+-----------------------------------------+-------------+

7 rows in set (0.00 sec)

2、用ANY\SOME\或ALL修饰的比较运算符

operand comparisor_operator ANY(subquery)

operand comparisor_operator SOME(subquery)

operand comparisor_operator ALL(subquery)

mysql> SELECT goods_id,goods_name,goods_price FROM tdb_goods WHERE goods_price >= ANY(SELECT ROUND(AVG(goods_price),2) FROM tdb_goods);

+----------+-----------------------------------------+-------------+

| goods_id | goods_name                              | goods_price |

+----------+-----------------------------------------+-------------+

|        3 | G150TH 15.6英寸游戏本                   |    8499.000 |

|        7 | SVP13226SCB 13.3英寸触控超极本          |    7999.000 |

|       13 | iMac ME086CH/A 21.5英寸一体电脑         |    9188.000 |

|       17 | Mac Pro MD878CH/A 专业级台式电脑        |   28888.000 |

|       18 |  HMZ-T3W 头戴显示设备                   |    6999.000 |

|       20 | X3250 M4机架式服务器 2583i14            |    6888.000 |

|       21 |  HMZ-T3W 头戴显示设备                   |    6999.000 |

+----------+-----------------------------------------+-------------+

7 rows in set (0.00 sec)



mysql> SELECT goods_id,goods_name,goods_price FROM tdb_goods WHERE goods_price >= ALL(SELECT ROUND(AVG(goods_price),2) FROM tdb_goods);

+----------+-----------------------------------------+-------------+

| goods_id | goods_name                              | goods_price |

+----------+-----------------------------------------+-------------+

|        3 | G150TH 15.6英寸游戏本                   |    8499.000 |

|        7 | SVP13226SCB 13.3英寸触控超极本          |    7999.000 |

|       13 | iMac ME086CH/A 21.5英寸一体电脑         |    9188.000 |

|       17 | Mac Pro MD878CH/A 专业级台式电脑        |   28888.000 |

|       18 |  HMZ-T3W 头戴显示设备                   |    6999.000 |

|       20 | X3250 M4机架式服务器 2583i14            |    6888.000 |

|       21 |  HMZ-T3W 头戴显示设备                   |    6999.000 |

+----------+-----------------------------------------+-------------+

7 rows in set (0.01 sec)



mysql> SELECT goods_id,goods_name,goods_price FROM tdb_goods WHERE goods_price >= SOME(SELECT ROUND(AVG(goods_price),2) FROM tdb_goods);

+----------+-----------------------------------------+-------------+

| goods_id | goods_name                              | goods_price |

+----------+-----------------------------------------+-------------+

|        3 | G150TH 15.6英寸游戏本                   |    8499.000 |

|        7 | SVP13226SCB 13.3英寸触控超极本          |    7999.000 |

|       13 | iMac ME086CH/A 21.5英寸一体电脑         |    9188.000 |

|       17 | Mac Pro MD878CH/A 专业级台式电脑        |   28888.000 |

|       18 |  HMZ-T3W 头戴显示设备                   |    6999.000 |

|       20 | X3250 M4机架式服务器 2583i14            |    6888.000 |

|       21 |  HMZ-T3W 头戴显示设备                   |    6999.000 |

+----------+-----------------------------------------+-------------+

7 rows in set (0.00 sec)

 

3、INT EXISTS(少用)引发的子查询

operand comparisor_operator [NOT] IN(subquery)

 

4、使用INSERT ... SELECT插入记录

将查询结果写入数据表

INSERT [INTO] table_name[(col_name,...)] SELECT ...

例句:INSERT tdb_goods_cates(cate_name) SELECT goods_cate FROM GROUP BY goods_cate;


 

mysql> SELECT goods_cate FROM tdb_goods GROUP BY goods_cate;

+---------------------+

| goods_cate          |

+---------------------+

| 台式机              |

| 平板电脑            |

| 服务器/工作站       |

| 游戏本              |

| 笔记本              |

| 笔记本配件          |

| 超级本              |

+---------------------+

7 rows in set (0.00 sec)



mysql> INSERT tdb_goods_cates (cate_name) SELECT goods_cate FROM tdb_goods GROUP BY goods_cate;

Query OK, 7 rows affected (0.10 sec)

Records: 7  Duplicates: 0  Warnings: 0



mysql> SELECT *FROM tdb_goods_cates;

+---------+---------------------+

| cate_id | cate_name           |

+---------+---------------------+

|       1 | 台式机              |

|       2 | 平板电脑            |

|       3 | 服务器/工作站       |

|       4 | 游戏本              |

|       5 | 笔记本              |

|       6 | 笔记本配件          |

|       7 | 超级本              |

+---------+---------------------+

7 rows in set (0.00 sec)

 

5、多表更新

语法结构:tale_reference {[INNER|CROSS]JOIN|{LEFT|RIGHT}[OUTER]JOIN}

table_reference ON conditional_expr

 

INNER JOIN 内连接

在MYSQL中,JOIN,CROSS JOIN和INNER JOIN是等价的

LEFT[OUTER] JOIN左外连接

RIGHT[OUTER] JOIN右外连接


 

mysql> UPDATE tdb_goods INNER JOIN tdb_goods_cates ON goods_cate = cate_name SET goods_cate = cate_id;

Query OK, 22 rows affected (0.09 sec)

Rows matched: 22  Changed: 22  Warnings: 0



mysql> SELECT *FROM tdb_goods;

+----------+--------------------------------------------------------------------------------------+------------+------------+-------------+---------+------------+

| goods_id | goods_name                                                                           | goods_cate | brand_name | goods_price | is_show | is_saleoff |

+----------+--------------------------------------------------------------------------------------+------------+------------+-------------+---------+------------+

|        1 | R510VC 15.6英寸笔记本                                                                | 5          | 华硕       |    3399.000 |       1 |          0 |

|        2 | Y400N 14.0英寸笔记本电脑                                                             | 5          | 联想       |    4899.000 |       1 |          0 |

|        3 | G150TH 15.6英寸游戏本                                                                | 4          | 雷神       |    8499.000 |       1 |          0 |

|        4 | X550CC 15.6英寸笔记本                                                                | 5          | 华硕       |    2799.000 |       1 |          0 |

|        5 | X240(20ALA0EYCD) 12.5英寸超极本                                                      | 7          | 联想       |    4999.000 |       1 |          0 |

|        6 | U330P 13.3英寸超极本                                                                 | 7          | 联想       |    4299.000 |       1 |          0 |

|        7 | SVP13226SCB 13.3英寸触控超极本                                                       | 7          | 索尼       |    7999.000 |       1 |          0 |

|        8 | iPad mini MD531CH/A 7.9英寸平板电脑                                                  | 2          | 苹果       |    1998.000 |       1 |          0 |

|        9 | iPad Air MD788CH/A 9.7英寸平板电脑 (16G WiFi版)                                    | 2          | 苹果       |    3388.000 |       1 |          0 |

|       10 |  iPad mini ME279CH/A 配备 Retina 显示屏 7.9英寸平板电脑 (16G WiFi版)               | 2          | 苹果       |    2788.000 |       1 |          0 |

|       11 | IdeaCentre C340 20英寸一体电脑                                                       | 1          | 联想       |    3499.000 |       1 |          0 |

|       12 | Vostro 3800-R1206 台式电脑                                                           | 1          | 戴尔       |    2899.000 |       1 |          0 |

|       13 | iMac ME086CH/A 21.5英寸一体电脑                                                      | 1          | 苹果       |    9188.000 |       1 |          0 |

|       14 | AT7-7414LP 台式电脑 (i5-3450四核 4G 500G 2G独显 DVD 键鼠 Linux )                   | 1          | 宏碁       |    3699.000 |       1 |          0 |

|       15 | Z220SFF F4F06PA工作站                                                                | 3          | 惠普       |    4288.000 |       1 |          0 |

|       16 | PowerEdge T110 II服务器                                                              | 3          | 戴尔       |    5388.000 |       1 |          0 |

|       17 | Mac Pro MD878CH/A 专业级台式电脑                                                     | 3          | 苹果       |   28888.000 |       1 |          0 |

|       18 |  HMZ-T3W 头戴显示设备                                                                | 6          | 索尼       |    6999.000 |       1 |          0 |

|       19 | 商务双肩背包                                                                         | 6          | 索尼       |      99.000 |       1 |          0 |

|       20 | X3250 M4机架式服务器 2583i14                                                         | 3          | IBM        |    6888.000 |       1 |          0 |

|       21 |  HMZ-T3W 头戴显示设备                                                                | 6          | 索尼       |    6999.000 |       1 |          0 |

|       22 | 商务双肩背包                                                                         | 6          | 索尼       |      99.000 |       1 |          0 |

+----------+--------------------------------------------------------------------------------------+------------+------------+-------------+---------+------------+

22 rows in set (0.00 sec)

6、多表更新之一步到位

UPDATE table_references SET col_name1 = {expr1|DEFAULT}

[,col_name2 = {expr2|DEFAULT}]...

[WHERE where_condition]

 

创建数据表的同时将查询结果写入数据表

CREAT TABLE [IF NOT EXISTS] table_name

[(creat_definition,...)]

select_statement

 

mysql> SELECT brand_name FROM tdb_goods GROUP BY brand_name;



+------------+

| brand_name |

+------------+

| IBM        |

| 华硕       |

| 宏碁       |

| 惠普       |

| 戴尔       |

| 索尼       |

| 联想       |

| 苹果       |

| 雷神       |

+------------+

9 rows in set (0.94 sec)



mysql> CREATE TABLE tdb_goods_brands(

    -> brand_id SMALLINT UNSIGNED PRIMARY KEY AUTO_INCREMENT,

    -> brand_name VARCHAR(40) NOT NULL

    -> )

    -> SELECT brand_name FROM tdb_goods GROUP BY brand_name;

Query OK, 9 rows affected (0.78 sec)

Records: 9  Duplicates: 0  Warnings: 0



mysql> show tables ;

+------------------+

| Tables_in_t1     |

+------------------+

| tdb_goods        |

| tdb_goods_brands |

| tdb_goods_cates  |

| tdb_goods_types  |

| users            |

+------------------+

5 rows in set (0.00 sec)



mysql> SELECT *FROM tdb_goods_brands;

+----------+------------+

| brand_id | brand_name |

+----------+------------+

|        1 | IBM        |

|        2 | 华硕       |

|        3 | 宏碁       |

|        4 | 惠普       |

|        5 | 戴尔       |

|        6 | 索尼       |

|        7 | 联想       |

|        8 | 苹果       |

|        9 | 雷神       |

+----------+------------+

9 rows in set (0.00 sec)


//创建内连接
mysql> UPDATE tdb_goods AS g INNER JOIN tdb_goods_brands AS b ON g.brand_name =b.brand_name

    -> SET g.brand_name = b.brand_id;

Query OK, 22 rows affected (0.16 sec)

Rows matched: 22  Changed: 22  Warnings: 0



mysql> SELECT *FROM tdb_goods_brands;

+----------+------------+

| brand_id | brand_name |

+----------+------------+

|        1 | IBM        |

|        2 | 华硕       |

|        3 | 宏碁       |

|        4 | 惠普       |

|        5 | 戴尔       |

|        6 | 索尼       |

|        7 | 联想       |

|        8 | 苹果       |

|        9 | 雷神       |

+----------+------------+

9 rows in set (0.00 sec)



mysql> SELECT *FROM tdb_goods;

+----------+--------------------------------------------------------------------------------------+------------+------------+-------------+---------+------------+

| goods_id | goods_name                                                                           | goods_cate | brand_name | goods_price | is_show | is_saleoff |

+----------+--------------------------------------------------------------------------------------+------------+------------+-------------+---------+------------+

|        1 | R510VC 15.6英寸笔记本                                                                | 5          | 2          |    3399.000 |       1 |          0 |

|        2 | Y400N 14.0英寸笔记本电脑                                                             | 5          | 7          |    4899.000 |       1 |          0 |

|        3 | G150TH 15.6英寸游戏本                                                                | 4          | 9          |    8499.000 |       1 |          0 |

|        4 | X550CC 15.6英寸笔记本                                                                | 5          | 2          |    2799.000 |       1 |          0 |

|        5 | X240(20ALA0EYCD) 12.5英寸超极本                                                      | 7          | 7          |    4999.000 |       1 |          0 |

|        6 | U330P 13.3英寸超极本                                                                 | 7          | 7          |    4299.000 |       1 |          0 |

|        7 | SVP13226SCB 13.3英寸触控超极本                                                       | 7          | 6          |    7999.000 |       1 |          0 |

|        8 | iPad mini MD531CH/A 7.9英寸平板电脑                                                  | 2          | 8          |    1998.000 |       1 |          0 |

|        9 | iPad Air MD788CH/A 9.7英寸平板电脑 (16G WiFi版)                                    | 2          | 8          |    3388.000 |       1 |          0 |

|       10 |  iPad mini ME279CH/A 配备 Retina 显示屏 7.9英寸平板电脑 (16G WiFi版)               | 2          | 8          |    2788.000 |       1 |          0 |

|       11 | IdeaCentre C340 20英寸一体电脑                                                       | 1          | 7          |    3499.000 |       1 |          0 |

|       12 | Vostro 3800-R1206 台式电脑                                                           | 1          | 5          |    2899.000 |       1 |          0 |

|       13 | iMac ME086CH/A 21.5英寸一体电脑                                                      | 1          | 8          |    9188.000 |       1 |          0 |

|       14 | AT7-7414LP 台式电脑 (i5-3450四核 4G 500G 2G独显 DVD 键鼠 Linux )                   | 1          | 3          |    3699.000 |       1 |          0 |

|       15 | Z220SFF F4F06PA工作站                                                                | 3          | 4          |    4288.000 |       1 |          0 |

|       16 | PowerEdge T110 II服务器                                                              | 3          | 5          |    5388.000 |       1 |          0 |

|       17 | Mac Pro MD878CH/A 专业级台式电脑                                                     | 3          | 8          |   28888.000 |       1 |          0 |

|       18 |  HMZ-T3W 头戴显示设备                                                                | 6          | 6          |    6999.000 |       1 |          0 |

|       19 | 商务双肩背包                                                                         | 6          | 6          |      99.000 |       1 |          0 |

|       20 | X3250 M4机架式服务器 2583i14                                                         | 3          | 1          |    6888.000 |       1 |          0 |

|       21 |  HMZ-T3W 头戴显示设备                                                                | 6          | 6          |    6999.000 |       1 |          0 |

|       22 | 商务双肩背包                                                                         | 6          | 6          |      99.000 |       1 |          0 |

+----------+--------------------------------------------------------------------------------------+------------+------------+-------------+---------+------------+

22 rows in set (0.00 sec)


//改变字段的数据类型
mysql> ALTER TABLE tdb_goods

    -> CHANGE goods_cate cate_id SMALLINT UNSIGNED NOT NULL,

    -> CHANGE brand_name brand_id SMALLINT UNSIGNED NOT NULL;

Query OK, 22 rows affected (1.12 sec)

Records: 22  Duplicates: 0  Warnings: 0


//查看表的定义
mysql> SHOW COLUMNS FROM tdb_goods;

+-------------+------------------------+------+-----+---------+----------------+

| Field       | Type                   | Null | Key | Default | Extra          |

+-------------+------------------------+------+-----+---------+----------------+

| goods_id    | smallint(5) unsigned   | NO   | PRI | NULL    | auto_increment |

| goods_name  | varchar(150)           | NO   |     | NULL    |                |

| cate_id     | smallint(5) unsigned   | NO   |     | NULL    |                |

| brand_id    | smallint(5) unsigned   | NO   |     | NULL    |                |

| goods_price | decimal(15,3) unsigned | NO   |     | 0.000   |                |

| is_show     | tinyint(1)             | NO   |     | 1       |                |

| is_saleoff  | tinyint(1)             | NO   |     | 0       |                |

+-------------+------------------------+------+-----+---------+----------------+

7 rows in set (0.00 sec)

 

7、连接

语法结构:table_reference

{[INNER|CROSS]JOIN|{LEFT|RIGHT}[OUTER]JOIN}

table_reference ON conditional_expr

 

数据表参照

table_reference

table_name [[AS]alias]|table_subquery [AS] alias

 

数据表可以使用table_name AS alias_name或者table_name alias_name赋予别名

table_subquery可以作为子查询使用在FROM子句中,这样的查询不许为其赋予别名

 

 

MYSQL在SELECT语句、多表更新、多表删除语句中支持JOIN操作

 

8、连接类型

INNER JOIN 内连接

在MYSQL中,JOIN,CROSS JOIN和INNER JOIN是等价的

LEFT[OUTER] JOIN左外连接

RIGHT[OUTER] JOIN右外连接

 

使用ON关键字来设定连接条件,也可以使用WHERE来代替

通常使用ON关键字来设定连接条件,使用WHERE关键字进行结果集记录的过滤


 

mysql> SELECT goods_id,goods_name,cate_name FROM tdb_goods INNER JOIN tdb_goods_cates ON tdb_goods.cate_id = tdb_goods_cates.cate_id;

+----------+--------------------------------------------------------------------------------------+---------------------+

| goods_id | goods_name                                                                           | cate_name           |

+----------+--------------------------------------------------------------------------------------+---------------------+

|        1 | R510VC 15.6英寸笔记本                                                                | 笔记本              |

|        2 | Y400N 14.0英寸笔记本电脑                                                             | 笔记本              |

|        3 | G150TH 15.6英寸游戏本                                                                | 游戏本              |

|        4 | X550CC 15.6英寸笔记本                                                                | 笔记本              |

|        5 | X240(20ALA0EYCD) 12.5英寸超极本                                                      | 超级本              |

|        6 | U330P 13.3英寸超极本                                                                 | 超级本              |

|        7 | SVP13226SCB 13.3英寸触控超极本                                                       | 超级本              |

|        8 | iPad mini MD531CH/A 7.9英寸平板电脑                                                  | 平板电脑            |

|        9 | iPad Air MD788CH/A 9.7英寸平板电脑 (16G WiFi版)                                    | 平板电脑            |

|       10 |  iPad mini ME279CH/A 配备 Retina 显示屏 7.9英寸平板电脑 (16G WiFi版)               | 平板电脑            |

|       11 | IdeaCentre C340 20英寸一体电脑                                                       | 台式机              |

|       12 | Vostro 3800-R1206 台式电脑                                                           | 台式机              |

|       13 | iMac ME086CH/A 21.5英寸一体电脑                                                      | 台式机              |

|       14 | AT7-7414LP 台式电脑 (i5-3450四核 4G 500G 2G独显 DVD 键鼠 Linux )                   | 台式机              |

|       15 | Z220SFF F4F06PA工作站                                                                | 服务器/工作站       |

|       16 | PowerEdge T110 II服务器                                                              | 服务器/工作站       |

|       17 | Mac Pro MD878CH/A 专业级台式电脑                                                     | 服务器/工作站       |

|       18 |  HMZ-T3W 头戴显示设备                                                                | 笔记本配件          |

|       19 | 商务双肩背包                                                                         | 笔记本配件          |

|       20 | X3250 M4机架式服务器 2583i14                                                         | 服务器/工作站       |

|       21 |  HMZ-T3W 头戴显示设备                                                                | 笔记本配件          |

|       22 | 商务双肩背包                                                                         | 笔记本配件          |

+----------+--------------------------------------------------------------------------------------+---------------------+

22 rows in set (0.07 sec)

 

十一、运算符和函数

1、字符函数

mysql> SELECT CONCAT('t1','-mysql');

+-----------------------+

| CONCAT('t1','-mysql') |

+-----------------------+

| t1-mysql              |

+-----------------------+

1 row in set (0.09 sec)



mysql> SELECT CONCAT_ws('|','A','B','C');

+----------------------------+

| CONCAT_ws('|','A','B','C') |

+----------------------------+

| A|B|C                      |

+----------------------------+

1 row in set (0.06 sec)



mysql> SELECT FORMAT(12560.12,2);

+--------------------+

| FORMAT(12560.12,2) |

+--------------------+

| 12,560.12          |

+--------------------+

1 row in set (0.09 sec)



mysql> SELECT FORMAT(12560.12,1);

+--------------------+

| FORMAT(12560.12,1) |

+--------------------+

| 12,560.1           |

+--------------------+

1 row in set (0.00 sec)



mysql> SELECT FORMAT(12560.12,0);

+--------------------+

| FORMAT(12560.12,0) |

+--------------------+

| 12,560             |

+--------------------+

1 row in set (0.00 sec)



mysql> SELECT LOWER('MYSQl');

+----------------+

| LOWER('MYSQl') |

+----------------+

| mysql          |

+----------------+

1 row in set (0.00 sec)



mysql> SELECT UPPER('mysQl');

+----------------+

| UPPER('mysQl') |

+----------------+

| MYSQL          |

+----------------+

1 row in set (0.00 sec)



mysql> SELECT LEFT('MYSQL',2);

+-----------------+

| LEFT('MYSQL',2) |

+-----------------+

| MY              |

+-----------------+

1 row in set (0.08 sec)



mysql> SELECT LOWER(LEFT('MYSQL',2));

+------------------------+

| LOWER(LEFT('MYSQL',2)) |

+------------------------+

| my                     |

+------------------------+

1 row in set (0.00 sec)



mysql> SELECT LOWER(RIGHT('MYSQL',3));

+-------------------------+

| LOWER(RIGHT('MYSQL',3)) |

+-------------------------+

| sql                     |

+-------------------------+

1 row in set (0.00 sec)



mysql> SELECT LENGTH('MY SQL');

+------------------+

| LENGTH('MY SQL') |

+------------------+

|                6 |

+------------------+

1 row in set (0.08 sec)



mysql> SELECT LTRIM(' MY SQL');

+------------------+

| LTRIM(' MY SQL') |

+------------------+

| MY SQL           |

+------------------+

1 row in set (0.05 sec)



mysql> SELECT RTRIM(' MY SQL');

+------------------+

| RTRIM(' MY SQL') |

+------------------+

|  MY SQL          |

+------------------+

1 row in set (0.00 sec)



mysql> SELECT LENGTH(LTRIM(' MY SQL'));

+--------------------------+

| LENGTH(LTRIM(' MY SQL')) |

+--------------------------+

|                        6 |

+--------------------------+

1 row in set (0.00 sec)



mysql> SELECT LENGTH(' MY SQL');

+-------------------+

| LENGTH(' MY SQL') |

+-------------------+

|                 7 |

+-------------------+

1 row in set (0.00 sec)

mysql> SELECT SUBSTRING('MYSQL',1,2);

+------------------------+

| SUBSTRING('MYSQL',1,2) |

+------------------------+

| MY                     |

+------------------------+

1 row in set (0.00 sec)



mysql>  SELECT 'MYSQL' LIKE 'M%';

+-------------------+

| 'MYSQL' LIKE 'M%' |

+-------------------+

|                 1 |

+-------------------+

1 row in set (0.00 sec)

 

 

 

2、数值运算符与函数

mysql> SELECT 3+4;

+-----+

| 3+4 |

+-----+

|   7 |

+-----+

1 row in set (0.07 sec)



mysql> SELECT CEIL(4.01);

+------------+

| CEIL(4.01) |

+------------+

|          5 |

+------------+

1 row in set (0.06 sec)



mysql> SELECT FLOOR(4.01);

+-------------+

| FLOOR(4.01) |

+-------------+

|           4 |

+-------------+

1 row in set (0.00 sec)



mysql> SELECT 3/4;

+--------+

| 3/4    |

+--------+

| 0.7500 |

+--------+

1 row in set (0.06 sec)



mysql> SELECT 3 DIV 4;

+---------+

| 3 DIV 4 |

+---------+

|       0 |

+---------+

1 row in set (0.00 sec)



mysql> SELECT 3 % 4;

+-------+

| 3 % 4 |

+-------+

|     3 |

+-------+

1 row in set (0.00 sec)



mysql> SELECT 3 MOD 4;

+---------+

| 3 MOD 4 |

+---------+

|       3 |

+---------+

1 row in set (0.00 sec)



mysql> SELECT POWER(2,3);

+------------+

| POWER(2,3) |

+------------+

|          8 |

+------------+

1 row in set (0.07 sec)



mysql> SELECT ROUND(12123.311231,2)

    -> ;

+-----------------------+

| ROUND(12123.311231,2) |

+-----------------------+

|              12123.31 |

+-----------------------+

1 row in set (0.07 sec)



mysql> SELECT TRUNCATE(12123.311231,2);

+--------------------------+

| TRUNCATE(12123.311231,2) |

+--------------------------+

|                 12123.31 |

+--------------------------+

1 row in set (0.00 sec)



mysql> SELECT TRUNCATE(12123.1231,2);

+------------------------+

| TRUNCATE(12123.1231,2) |

+------------------------+

|               12123.12 |

+------------------------+

1 row in set (0.00 sec)

3、比较运算符与函数

mysql> SELECT 15 between 1 and 22;

+---------------------+

| 15 between 1 and 22 |

+---------------------+

|                   1 |

+---------------------+

1 row in set (0.07 sec)



mysql> SELECT 15 not between 1 and 22;

+-------------------------+

| 15 not between 1 and 22 |

+-------------------------+

|                       0 |

+-------------------------+

1 row in set (0.00 sec)



mysql> SELECT 10 IN (5,10,12,3);

+-------------------+

| 10 IN (5,10,12,3) |

+-------------------+

|                 1 |

+-------------------+

1 row in set (0.07 sec)



mysql> SELECT NULL IS NULL;

+--------------+

| NULL IS NULL |

+--------------+

|            1 |

+--------------+

1 row in set (0.06 sec)



mysql> SELECT 0 IS NULL;

+-----------+

| 0 IS NULL |

+-----------+

|         0 |

+-----------+

1 row in set (0.00 sec)

 

 

4、日期时间函数

mysql> SELECT NOW();

+---------------------+

| NOW()               |

+---------------------+

| 2018-10-01 16:28:53 |

+---------------------+

1 row in set (0.08 sec)



mysql> SELECT CURDATE();

+------------+

| CURDATE()  |

+------------+

| 2018-10-01 |

+------------+

1 row in set (0.01 sec)



mysql> SELECT CURTIME();

+-----------+

| CURTIME() |

+-----------+

| 16:29:19  |

+-----------+

1 row in set (0.00 sec)



mysql> SELECT DATE_ADD('2018-10-01',INTERVAL 300 DAY);

+-----------------------------------------+

| DATE_ADD('2018-10-01',INTERVAL 300 DAY) |

+-----------------------------------------+

| 2019-07-28                              |

+-----------------------------------------+

1 row in set (0.07 sec)



mysql> SELECT DATE_ADD('2018-10-01',INTERVAL -300 DAY);

+------------------------------------------+

| DATE_ADD('2018-10-01',INTERVAL -300 DAY) |

+------------------------------------------+

| 2017-12-05                               |

+------------------------------------------+

1 row in set (0.01 sec)



mysql> SELECT DATE_ADD('2018-10-01',INTERVAL 3 WEEK);

+----------------------------------------+

| DATE_ADD('2018-10-01',INTERVAL 3 WEEK) |

+----------------------------------------+

| 2018-10-22                             |

+----------------------------------------+

1 row in set (0.00 sec)



mysql> SELECT DATEDIFF('2017-06-09','2018-10-01');

+-------------------------------------+

| DATEDIFF('2017-06-09','2018-10-01') |

+-------------------------------------+

|                                -479 |

+-------------------------------------+

1 row in set (0.07 sec)



mysql> SELECT DATE_FORMAT('2018-10-01','%m/%d/%Y');

+--------------------------------------+

| DATE_FORMAT('2018-10-01','%m/%d/%Y') |

+--------------------------------------+

| 10/01/2018                           |

+--------------------------------------+

1 row in set (0.00 sec)

 

5、信息函数

mysql> SELECT CONNECTION_ID();

+-----------------+

| CONNECTION_ID() |

+-----------------+

|              33 |

+-----------------+

1 row in set (0.00 sec)



mysql> SELECT DATABASE();

+------------+

| DATABASE() |

+------------+

| t1         |

+------------+

1 row in set (0.00 sec)



mysql> SELECT USER();

+----------------+

| USER()         |

+----------------+

| root@localhost |

+----------------+

1 row in set (0.00 sec)



mysql> SELECT VERSION();

+-----------+

| VERSION() |

+-----------+

| 5.7.22    |

+-----------+

1 row in set (0.05 sec)

 

6、聚合函数

mysql> select *from tdb_goods;

+----------+--------------------------------------------------------------------------------------+---------+----------+-------------+---------+------------+

| goods_id | goods_name                                                                           | cate_id | brand_id | goods_price | is_show | is_saleoff |

+----------+--------------------------------------------------------------------------------------+---------+----------+-------------+---------+------------+

|        1 | R510VC 15.6英寸笔记本                                                                |       5 |        2 |    3399.000 |       1 |          0 |

|        2 | Y400N 14.0英寸笔记本电脑                                                             |       5 |        7 |    4899.000 |       1 |          0 |

|        3 | G150TH 15.6英寸游戏本                                                                |       4 |        9 |    8499.000 |       1 |          0 |

|        4 | X550CC 15.6英寸笔记本                                                                |       5 |        2 |    2799.000 |       1 |          0 |

|        5 | X240(20ALA0EYCD) 12.5英寸超极本                                                      |       7 |        7 |    4999.000 |       1 |          0 |

|        6 | U330P 13.3英寸超极本                                                                 |       7 |        7 |    4299.000 |       1 |          0 |

|        7 | SVP13226SCB 13.3英寸触控超极本                                                       |       7 |        6 |    7999.000 |       1 |          0 |

|        8 | iPad mini MD531CH/A 7.9英寸平板电脑                                                  |       2 |        8 |    1998.000 |       1 |          0 |

|        9 | iPad Air MD788CH/A 9.7英寸平板电脑 (16G WiFi版)                                    |       2 |        8 |    3388.000 |       1 |          0 |

|       10 |  iPad mini ME279CH/A 配备 Retina 显示屏 7.9英寸平板电脑 (16G WiFi版)               |       2 |        8 |    2788.000 |       1 |          0 |

|       11 | IdeaCentre C340 20英寸一体电脑                                                       |       1 |        7 |    3499.000 |       1 |          0 |

|       12 | Vostro 3800-R1206 台式电脑                                                           |       1 |        5 |    2899.000 |       1 |          0 |

|       13 | iMac ME086CH/A 21.5英寸一体电脑                                                      |       1 |        8 |    9188.000 |       1 |          0 |

|       14 | AT7-7414LP 台式电脑 (i5-3450四核 4G 500G 2G独显 DVD 键鼠 Linux )                   |       1 |        3 |    3699.000 |       1 |          0 |

|       15 | Z220SFF F4F06PA工作站                                                                |       3 |        4 |    4288.000 |       1 |          0 |

|       16 | PowerEdge T110 II服务器                                                              |       3 |        5 |    5388.000 |       1 |          0 |

|       17 | Mac Pro MD878CH/A 专业级台式电脑                                                     |       3 |        8 |   28888.000 |       1 |          0 |

|       18 |  HMZ-T3W 头戴显示设备                                                                |       6 |        6 |    6999.000 |       1 |          0 |

|       19 | 商务双肩背包                                                                         |       6 |        6 |      99.000 |       1 |          0 |

|       20 | X3250 M4机架式服务器 2583i14                                                         |       3 |        1 |    6888.000 |       1 |          0 |

|       21 |  HMZ-T3W 头戴显示设备                                                                |       6 |        6 |    6999.000 |       1 |          0 |

|       22 | 商务双肩背包                                                                         |       6 |        6 |      99.000 |       1 |          0 |

|       23 |  LaserJet Pro P1606dn 黑白激光打印机                                                 |      12 |        4 |    1849.000 |       1 |          0 |

+----------+--------------------------------------------------------------------------------------+---------+----------+-------------+---------+------------+

23 rows in set (0.00 sec)



mysql> SELECT AVG(goods_price) FROM tdb_goods;

+------------------+

| AVG(goods_price) |

+------------------+

|     5471.6956522 |

+------------------+

1 row in set (0.22 sec)



mysql> SELECT COUNT(goods_id) FROM tdb_goods;

+-----------------+

| COUNT(goods_id) |

+-----------------+

|              23 |

+-----------------+

1 row in set (0.06 sec)



mysql> SELECT MIN(goods_price) FROM tdb_goods;

+------------------+

| MIN(goods_price) |

+------------------+

|           99.000 |

+------------------+

1 row in set (0.04 sec)



mysql> SELECT MAX(goods_price) FROM tdb_goods;

+------------------+

| MAX(goods_price) |

+------------------+

|        28888.000 |

+------------------+

1 row in set (0.00 sec)



mysql> SELECT SUM(goods_price) FROM tdb_goods;

+------------------+

| SUM(goods_price) |

+------------------+

|       125849.000 |

+------------------+

1 row in set (0.00 sec)

 

7、加密函数

MD5();     信息摘要算法

 

PASSWORD(); 密码算法

mysql> SELECT MD5('admin');

+----------------------------------+

| MD5('admin')                     |

+----------------------------------+

| 21232f297a57a5a743894a0e4a801fc3 |

+----------------------------------+

1 row in set (0.00 sec)



mysql> SELECT PASSWORD('admin');

+-------------------------------------------+

| PASSWORD('admin')                         |

+-------------------------------------------+

| *4ACFE3202A5FF5CF467898FC58AAB1D615029441 |

+-------------------------------------------+

1 row in set, 1 warning (0.07 sec)



//修改密码

SET PASSWORD = PASSWORD('123456');

8、自定义函数

自定义函数(UDF)

用户自定义函数(user-defined function,UDF)是一种MYSQL扩展的途径,用法和内置函数相同

 

函数可以返回任意的数据类型

 

创建自定义函数

CREAT FUNCTION function_name RETURNS

{STRING|INTEGER|REAL|DECIMAL}

routine_body

 

函数体:

函数体由合法的SQL语句组成

函数体可以是简单的SELECT或者INSERT语句

函数体如果未复合结构则使用BEGIN...END语句

符合结构可以包含声明,循环,控制结构

 

 

创建不带参的自定义函数

mysql> CREATE FUNCTION MYNOW() RETURNS VARCHAR(30)

    -> RETURN DATE_FORMAT(NOW(),'%Y年%m月%d日 %H时%i分%s秒');

Query OK, 0 rows affected (0.04 sec)



mysql> SELECT MYNOW();

+-----------------------------------+

| MYNOW()                           |

+-----------------------------------+

| 2018年10月01日 18时51分43秒       |

+-----------------------------------+

1 row in set (0.00 sec)

创建带有参数的自定义函数

mysql> CREATE FUNCTION F2(num1 SMALLINT UNSIGNED,num2 SMALLINT UNSIGNED)

    -> RETURNS FLOAT(10,2) UNSIGNED

    -> RETURN (num1+num2)/2;

Query OK, 0 rows affected (0.00 sec)



mysql> SELECT F2(10,15);

+-----------+

| F2(10,15) |

+-----------+

|     12.50 |

+-----------+

1 row in set (0.06 sec)

 

创建具有复合结构函数体的自定义函数

必须包含在begin。。。end之间

 

删除自定义函数

DROP FUNCTION [IF EXISTS] function_name

 

十二、存储

1、存储过程简介

存储过程

SQL命令--》 MYSQL引擎--》分析 语法正确--》可识别命令

执行--》执行结果 返回--》客户端

 

存储过程是SQL语句和控制语句的预编译集合,以一个名称存储并作为单元处理

 

优点:

增强SQL语句的功能和灵活性

实现较快的执行速度

减少了网络流量

 

2、创建存储过程

CREAT

[DEFINER = {user|CURRENT_USER}]

PROCEDURE sp_name([proc_parameter[,...]])

[characteristic...]routine_body

 

proc_parameter:

[IN|OUT|INOUT]param_name type

 

参数:

IN,表示该参数的值必须在调用村塾过程时指定

OUT,表示该参数的值可以被存储过程改变,并且可以返回

INOUT,表示该参数的调用时指定,并且可以被改变和返回

 

过程体:

过程体由合法的SQL语句组成

过程体可以是任意SQL语句

过程体如果为复合结构则使用BEGIN...END语句

复合结构可以包含声明,循环,控制结构

 

3、调用存储过程:

CALL sp_name([parameter[,...]])

CALL sp_name[()]

 

4、删除存储过程:

DROP PROCEDURE [IF EXISTS]sp_name

mysql> DROP PROCEDURE removeUserById;

Query OK, 0 rows affected (0.04 sec)

 

5、创建不带参的存储过程

mysql> CREATE PROCEDURE sp1() SELECT VERSION();

Query OK, 0 rows affected (0.00 sec)



mysql> CALL sp1;

+-----------+

| VERSION() |

+-----------+

| 5.7.22    |

+-----------+

1 row in set (0.00 sec)



Query OK, 0 rows affected (0.00 sec)

6、创建带IN类型参的存储过程

mysql> SELECT *FROM users;

+----+----------+----------+-----+------+

| id | username | password | age | sex  |

+----+----------+----------+-----+------+

|  1 | Tom      | 123      |  24 |    0 |

|  2 | John     | 123      |  32 |    0 |

|  3 | Tom      | 123      |  22 |    0 |

|  4 | Tom      | 123      |  21 |    0 |

|  5 | Tim      | 123      |  20 |    0 |

|  7 | Ben      | 123      |   8 |    0 |

+----+----------+----------+-----+------+

6 rows in set (0.08 sec)



mysql> DELIMITER //

mysql> CREATE PROCEDURE removeUserById (IN p_id INT UNSIGNED)

    -> BEGIN

    -> DELETE FROM users WHERE id = p_id;

    -> END

    -> //

Query OK, 0 rows affected (0.01 sec)



mysql> DELIMITER ;

mysql> CALL removeUserById(7);

Query OK, 1 row affected (0.09 sec)



mysql> SELECT *FROM users;

+----+----------+----------+-----+------+

| id | username | password | age | sex  |

+----+----------+----------+-----+------+

|  1 | Tom      | 123      |  24 |    0 |

|  2 | John     | 123      |  32 |    0 |

|  3 | Tom      | 123      |  22 |    0 |

|  4 | Tom      | 123      |  21 |    0 |

|  5 | Tim      | 123      |  20 |    0 |

+----+----------+----------+-----+------+

5 rows in set (0.00 sec)

7、创建带有IN和OUT类型参数的存储过程

mysql> SELECT *FROM users;

+----+----------+----------+-----+------+

| id | username | password | age | sex  |

+----+----------+----------+-----+------+

|  1 | Tom      | 123      |  24 |    0 |

|  2 | John     | 123      |  32 |    0 |

|  3 | Tom      | 123      |  22 |    0 |

|  4 | Tom      | 123      |  21 |    0 |

|  5 | Tim      | 123      |  20 |    0 |

+----+----------+----------+-----+------+

5 rows in set (0.14 sec)



//结束符修改为//

mysql> DELIMITER //

mysql> CREATE PROCEDURE removeUserAndReturnUserNum(IN p_id INT UNSIGNED,OUT userName  INT UNSIGNED)

    -> BEGIN

    -> DELETE FROM users WHERE id = p_id;

    -> SELECT count(id) FROM users INTO userNum;

    -> end;

    -> //

Query OK, 0 rows affected (0.13 sec)



//结束符修改为;

mysql> DELIMITER ;

mysql> SELECT COUNT(id) FROM users;

+-----------+

| COUNT(id) |

+-----------+

|         5 |

+-----------+

1 row in set (0.00 sec)



//删除ID为5的用户返回用户总数给用户变量@nums

mysql> CALL removeUserAndReturnUserNum(5,@nums);

Query OK, 1 row affected (0.12 sec)



mysql> SELECT *FROM users;

+----+----------+----------+-----+------+

| id | username | password | age | sex  |

+----+----------+----------+-----+------+

|  1 | Tom      | 123      |  24 |    0 |

|  2 | John     | 123      |  32 |    0 |

|  3 | Tom      | 123      |  22 |    0 |

|  4 | Tom      | 123      |  21 |    0 |

+----+----------+----------+-----+------+

4 rows in set (0.00 sec)



mysql> SELECT @nums;

+-------+

| @nums |

+-------+

|     4 |

+-------+

1 row in set (0.00 sec)

 

8、创建带有多个OUT类型参数的存储过程

mysql> DELIMITER //

mysql> CREATE PROCEDURE removeUserByAgeAndReturnInfors(IN p_age SMALLINT UNSIGNED,OUT deleteUser SMALLINT UNSIGNED,OUT userCounts SMALLINT UNSIGNED)

    -> BEGIN

    -> DELETE FROM users WHERE age = p_age;

    -> SELECT COUNT(id) FROM users INTO userCounts;

    -> SELECT ROW_COUNT() INTO deleteUser;

    -> END//

Query OK, 0 rows affected (0.00 sec)



mysql> DELIMITER ;



mysql> CALL removeUserByAgeAndReturnInfors(22,@a,@b);

Query OK, 1 row affected (0.00 sec)



mysql> SELECT @a,@b;

+------+------+

| @a   | @b   |

+------+------+

|    1 |    3 |

+------+------+

1 row in set (0.00 sec)



mysql> SELECT *FROM users;

+----+----------+----------+-----+------+

| id | username | password | age | sex  |

+----+----------+----------+-----+------+

|  1 | Tom      | 123      |  24 |    0 |

|  2 | John     | 123      |  32 |    0 |

|  4 | Tom      | 123      |  21 |    0 |

+----+----------+----------+-----+------+

3 rows in set (0.00 sec)

9、存储过程与自定义函数的区别

存储过程实现的功能要复杂一些;函数的针对性更强

存储过程可以返回多个值;函数只能有一个返回值

存储过程一般独立来执行;函数可以作为其他SQL语句的组成部分来出现

10、修改存储过程

ALTER PROCEDURE sp_name[characteristic...]

COMMENT 'string'

|{CONTAINS SQL|NO SQL|READS SQL DATA|MODIDIES SQL DATA}

|SQL SECURITY{DEFINER|INVOKER}

 

十三、存储引擎

1、存储引擎简介

MYSQL 可以将数据以不同的技术存储在文件(内存)中,这种技术称为存储引擎

每一种存储引擎使用不同的存储机制、索引技巧、锁定水平,最终提供广泛且不同的功能

 

MYSQL支持的存储引擎

MyISAM

InnoDB

Memory

CSV

Archive

2、相关知识点

并发控制:当多个连接对记录进行修改是保证数据的一致性和完整性

 

解决:

共享锁(读锁):在同一时间段,多用户可以读取同一资源,读取过程中数据不会发生任何变化

 

排他锁(写锁):在任何时候只能有一个用户写入资源,当进行写锁时会阻塞或者写锁操作

 

锁颗粒

表锁:一种开销最小的策略锁

行锁:一种开销最大的策略锁,支持最大并发

 

事务

事务用于保证数据库的完整性

事务的特性(ACID)

原子性(Atomicity)

一致性(Consistency)

隔离性(Isolation)

持久性(Durability)

 

外键

 

索引

是对数据表中一列或者多列的值进行排序的一种结构

分类:普通索引、唯一索引、全文索引、btree索引、hash索引

 

3、修改存储引擎方法

1)、通过修改MYSQL配置文件

-default-storage-engine = engine

2)、通过创建数据表命令实现

-CREATE TABLE table_name(

...

...

)ENGINE = engine;

 

3)、通过修改数据表命令实现

-ALTER TABLE table_name ENGINE [=] engine_name;

 

 

 

 

 

 

 

 

 

猜你喜欢

转载自blog.csdn.net/qq_40270579/article/details/82872855