马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
x
一、底子知识
(一)、标志符的定名规则
1.数据库名、表名不得超过30个字符,变量名限定为29个
2.必须只能包含 A–Z, a–z, 0–9, _共63个字符
3.数据库名、表名、字段名等对象名中间不要包含空格
4.同一个MySQL软件中,数据库不能同名;同一个数据库中,表不能重名;同一个表中,字段不能重名
5.必须保证你的字段没有和生存字、数据库系统或常用方法辩论。如果有辩论并要坚持使用,则需要在SQL语句中使用`(着重号)引起来
6.保持字段名和范例的一致性:在定名字段并为其指定数据范例的时间肯定要保证一致性,如果数据范例在一个表里是整型,那么在另一个表中也要保持为整型
(二)、MySQL中的数据范例
整型:INT、BIGINT
浮点范例:FLOAT、 DOUBLE
定点数范例:DECIMAL
位范例:BIT
日期时间范例:YEAR、TIME、DATE、DATETIME
文本字符串范例:CHAR、 VARCHAR
摆列范例:ENUM
聚集范例:SET
二进制字符串范例:BINARY、 VARBINARY
JSON范例:JSON对象、JSON数组
对常用数据范例的描述 :
INT:存储大小为 4个字节 。
CHAR(size):定长字符数据。可不指定size大小,若未指定,默认为1个字符。若指定,size最大值为255。
VARCHAR(size) :可变长字符数据,根据字符串实际长度生存,但必须指定长度。
FLOAT(M,D) 单精度:占用4个字节,M=该数值的总位数(整数位数+小数位数),D=小数位数。
DOUBLE(M,D) 双精度:占用8个字节,M=该数值的总位数(整数位数+小数位数),D=小数位数。
DECIMAL(M,D) 高精度小数:占用M+2个字节。
DATE 日期型数据:格式’YYYY-MM-DD’。
二、数据库的创建与管理
(一)、创建数据库
方法1:create database 数据库名;
- mysql> create database test01;
- Query OK, 1 row affected (0.01 sec)
复制代码 方法2:create database 数据库名 character set 字符集;
- mysql> create database test02 character set 'utf8mb4';
- Query OK, 1 row affected (0.02 sec)
复制代码 方法3:create database if not exists 数据库名;
- mysql> create database if not exists test03;
- Query OK, 1 row affected (0.01 sec)
复制代码 (二)、使用数据库
1.查察当前连接中的所有数据库
格式:show databases;
- mysql> show databases;
- +--------------------+
- | Database |
- +--------------------+
- | information_schema |
- | mysql |
- | performance_schema |
- | sys |
- | test01 |
- | test02 |
- | test03 |
- +--------------------+
- 7 rows in set (0.00 sec)
复制代码 2.查察当前正在使用的数据库
格式:select database() from dual;
- mysql> use test01;
- Database changed
- mysql> select database() from dual;
- +------------+
- | database() |
- +------------+
- | test01 |
- +------------+
- 1 row in set (0.00 sec)
复制代码 3.查察指定库中的所有表
格式:show tables from 数据库名;
- mysql> use test01;
- Database changed
- mysql> show tables from mysql;
- +------------------------------------------------------+
- | Tables_in_mysql |
- +------------------------------------------------------+
- | columns_priv |
- | component |
- | db |
- | default_roles |
- | engine_cost |
- | func |
- | general_log |
- | global_grants |
- | gtid_executed |
- | help_category |
- | help_keyword |
- | help_relation |
- | help_topic |
- | innodb_index_stats |
- | innodb_table_stats |
- | ndb_binlog_index |
- | password_history |
- | plugin |
- | procs_priv |
- | proxies_priv |
- | replication_asynchronous_connection_failover |
- | replication_asynchronous_connection_failover_managed |
- | replication_group_configuration_version |
- | replication_group_member_actions |
- | role_edges |
- | 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 |
- +------------------------------------------------------+
- 38 rows in set (0.01 sec)
复制代码 若想查察当前数据库中的所有表,可不消指明数据库名直接写为:show tables;
- mysql> use test01;
- Database changed
- show tables;
- Empty set (0.00 sec)
复制代码 4.查察数据库的创建信息
方法1:show create database 数据库名;
- mysql> show create database test01;
- +----------+----------------------------------------------------------------------------------------------------------------------------------+
- | Database | Create Database
- |
- +----------+----------------------------------------------------------------------------------------------------------------------------------+
- | test01 | CREATE DATABASE `test01` /*!40100 DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci */ /*!80016 DEFAULT ENCRYPTION='N' */ |
- +----------+----------------------------------------------------------------------------------------------------------------------------------+
- 1 row in set (0.00 sec)
复制代码 方法2:show create database 数据库名\G
- mysql> show create database test01\G
- *************************** 1. row ***************************
- Database: test01
- Create Database: CREATE DATABASE `test01` /*!40100 DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci */ /*!80016 DEFAULT ENCRYPTION='N' */
- 1 row in set (0.00 sec)
复制代码 5.切换数据库
格式:use 数据库名;
- mysql> use test02;
- Database changed
复制代码 (三)、修改数据库
数据库的修改一样平常是修改数据库的字符集 字符集一样平常有:utf8、gbk等.
格式:alter database 数据库名 character set 字符集;
- alter database test01 character set 'utf8';
- Query OK, 1 row affected, 1 warning (0.01 sec)
复制代码 (四)、删除数据库.
方法1:
drop database 数据库名;
- mysql> drop database test02;
- Query OK, 0 rows affected (0.01 sec)
复制代码 方法2:
drop database if exists 数据库名;
- drop database if exists test01;
- Query OK, 0 rows affected (0.01 sec)
复制代码 三、表的创建与管理
(一)、表的创建
方式1:
create table if not exists 表名(
字段1 数据范例 [约束条件] [默认值],
字段2 数据范例 [约束条件] [默认值],
字段3 数据范例 [约束条件] [默认值],
……
[表约束条件]
);
- create table if not exists emp01
- -> (id int,name varchar(20),sex char(1));
- Query OK, 0 rows affected (0.04 sec)
复制代码 方式2:
create table 表名(
字段1 数据范例 [约束条件] [默认值],
字段2 数据范例 [约束条件] [默认值],
字段3 数据范例 [约束条件] [默认值],
……
[表约束条件]
);
- mysql> create table emp02
- -> (id int,name varchar(20),sex char(1));
- Query OK, 0 rows affected (0.02 sec)
复制代码 加上了if not exists,则表现:如果当前数据库中不存在要创建的数据表,则创建数据表;如果当前数据库中已经存在要创建的数据表,则忽略建表语句,不再创建数据表。
创建 表时,表名,表中各个字段名,以及字段相应的数据范例(长度)肯定要指明。
数据范例int后面也可以指定长度,表现的是数据的显示宽度,默认显示宽度为11.一样平常情况下推荐int范例数据指定长度。
方式3:通过其他表的查询结果来创建表
根据查询结果创建新表(导入了查询的数据)
格式1:
create table 表名
as
select * from employees;
若想创建的仅仅是空表则可以通过条件where 1=2得到空数据,以次实现创建空表
格式:
create table 表名
as
select * from employees
where 1=2;
- desc emp01;
- +-------+-------------+------+-----+---------+-------+
- | Field | Type | Null | Key | Default | Extra |
- +-------+-------------+------+-----+---------+-------+
- | id | int | YES | | NULL | |
- | name | varchar(20) | YES | | NULL | |
- | sex | char(1) | YES | | NULL | |
- +-------+-------------+------+-----+---------+-------+
- 3 rows in set (0.01 sec)
- mysql> create table emp03
- -> as
- -> select * from emp01
- -> where 1=2;
- Query OK, 0 rows affected (0.02 sec)
- Records: 0 Duplicates: 0 Warnings: 0
- mysql> desc emp03;
- +-------+-------------+------+-----+---------+-------+
- | Field | Type | Null | Key | Default | Extra |
- +-------+-------------+------+-----+---------+-------+
- | id | int | YES | | NULL | |
- | name | varchar(20) | YES | | NULL | |
- | sex | char(1) | YES | | NULL | |
- +-------+-------------+------+-----+---------+-------+
- 3 rows in set (0.00 sec)
- select * from emp03;
- Empty set (0.00 sec)
复制代码 如果要查询的表不在当前地点的库中,可以使用库名.表名在当前库中查询其他库中的表。
(二)、查察创建的表结构
方法1;
describe/desc 表名;
- mysql> desc emp01;
- +-------+-------------+------+-----+---------+-------+
- | Field | Type | Null | Key | Default | Extra |
- +-------+-------------+------+-----+---------+-------+
- | id | int | YES | | NULL | |
- | name | varchar(20) | YES | | NULL | |
- | sex | char(1) | YES | | NULL | |
- +-------+-------------+------+-----+---------+-------+
- 3 rows in set (0.00 sec)
- mysql> describe emp01;
- +-------+-------------+------+-----+---------+-------+
- | Field | Type | Null | Key | Default | Extra |
- +-------+-------------+------+-----+---------+-------+
- | id | int | YES | | NULL | |
- | name | varchar(20) | YES | | NULL | |
- | sex | char(1) | YES | | NULL | |
- +-------+-------------+------+-----+---------+-------+
- 3 rows in set (0.00 sec)
复制代码 方法2:
show create 表名;或 show create 表名\G
- mysql> show create table emp01;
- +-------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
- | Table | Create Table
- |
- +-------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
- | emp01 | CREATE TABLE `emp01` (
- `id` int DEFAULT NULL,
- `name` varchar(20) DEFAULT NULL,
- `sex` char(1) DEFAULT NULL
- ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci |
- +-------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
- 1 row in set (0.00 sec)
- mysql> show create table emp01\G
- *************************** 1. row ***************************
- Table: emp01
- Create Table: CREATE TABLE `emp01` (
- `id` int DEFAULT NULL,
- `name` varchar(20) DEFAULT NULL,
- `sex` char(1) DEFAULT NULL
- ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
- 1 row in set (0.00 sec)
复制代码 使用show create table语句不但可以查察表创建表时的详细语句,还可以查察存储引擎和字符编码。
(三)、修改表
修改表指的是修改数据库中已经存在的数据表的结构,使用 alter table 语句可以实现
1.追加一个列
格式:
alter table 表名
add 【column】 字段名 字段范例 【first/after 字段名】;
- desc emp01;
- +-------+-------------+------+-----+---------+-------+
- | Field | Type | Null | Key | Default | Extra |
- +-------+-------------+------+-----+---------+-------+
- | id | int | YES | | NULL | |
- | name | varchar(20) | YES | | NULL | |
- | sex | char(1) | YES | | NULL | |
- +-------+-------------+------+-----+---------+-------+
- 3 rows in set (0.00 sec)
- mysql> alter table emp01
- -> add column age int after name;
- Query OK, 0 rows affected (0.05 sec)
- mysql> desc emp01;
- +-------+-------------+------+-----+---------+-------+
- | Field | Type | Null | Key | Default | Extra |
- +-------+-------------+------+-----+---------+-------+
- | id | int | YES | | NULL | |
- | name | varchar(20) | YES | | NULL | |
- | age | int | YES | | NULL | |
- | sex | char(1) | YES | | NULL | |
- +-------+-------------+------+-----+---------+-------+
- 4 rows in set (0.00 sec)
复制代码 **2.修改一个列:**可以修改列的数据范例,长度、默认值和位置
格式:
alter table 表名
modify 字段名1 字段范例 【default 默认值】【first /after 段名2】;
- mysql> desc emp01;
- +-------+-------------+------+-----+---------+-------+
- | Field | Type | Null | Key | Default | Extra |
- +-------+-------------+------+-----+---------+-------+
- | id | int | YES | | NULL | |
- | name | varchar(20) | YES | | NULL | |
- | age | int | YES | | NULL | |
- | sex | char(1) | YES | | NULL | |
- +-------+-------------+------+-----+---------+-------+
- 4 rows in set (0.00 sec)
- mysql> alter table emp01
- -> modify name varchar(10);
- Query OK, 0 rows affected (0.07 sec)
- Records: 0 Duplicates: 0 Warnings: 0
- mysql> desc emp01;
- +-------+-------------+------+-----+---------+-------+
- | Field | Type | Null | Key | Default | Extra |
- +-------+-------------+------+-----+---------+-------+
- | id | int | YES | | NULL | |
- | name | varchar(10) | YES | | NULL | |
- | age | int | YES | | NULL | |
- | sex | char(1) | YES | | NULL | |
- +-------+-------------+------+-----+---------+-------+
- 4 rows in set (0.00 sec)
- mysql> alter table emp01
- -> modify name varchar(20) after sex;
- Query OK, 0 rows affected (0.04 sec)
- Records: 0 Duplicates: 0 Warnings: 0
- mysql> desc emp01;
- +-------+-------------+------+-----+---------+-------+
- | Field | Type | Null | Key | Default | Extra |
- +-------+-------------+------+-----+---------+-------+
- | id | int | YES | | NULL | |
- | age | int | YES | | NULL | |
- | sex | char(1) | YES | | NULL | |
- | name | varchar(20) | YES | | NULL | |
- +-------+-------------+------+-----+---------+-------+
- 4 rows in set (0.00 sec)
复制代码 3. 重定名一个列
格式:
alter table 表名
change【column】 字段名 新字段名 新字段数据范例;
- mysql> desc emp01;
- +-------+-------------+------+-----+---------+-------+
- | Field | Type | Null | Key | Default | Extra |
- +-------+-------------+------+-----+---------+-------+
- | id | int | YES | | NULL | |
- | age | int | YES | | NULL | |
- | sex | char(1) | YES | | NULL | |
- | name | varchar(20) | YES | | NULL | |
- +-------+-------------+------+-----+---------+-------+
- 4 rows in set (0.00 sec)
- mysql> alter table emp01
- -> change name name_info varchar(30);
- Query OK, 0 rows affected (0.01 sec)
- Records: 0 Duplicates: 0 Warnings: 0
- mysql> desc emp01;
- +-----------+-------------+------+-----+---------+-------+
- | Field | Type | Null | Key | Default | Extra |
- +-----------+-------------+------+-----+---------+-------+
- | id | int | YES | | NULL | |
- | age | int | YES | | NULL | |
- | sex | char(1) | YES | | NULL | |
- | name_info | varchar(30) | YES | | NULL | |
- +-----------+-------------+------+-----+---------+-------+
- 4 rows in set (0.00 sec)
复制代码 4.删除一个列
格式:
alter table 表名
drop 【column】要删除的字段名
- desc emp01;
- +-----------+-------------+------+-----+---------+-------+
- | Field | Type | Null | Key | Default | Extra |
- +-----------+-------------+------+-----+---------+-------+
- | id | int | YES | | NULL | |
- | age | int | YES | | NULL | |
- | sex | char(1) | YES | | NULL | |
- | name_info | varchar(30) | YES | | NULL | |
- +-----------+-------------+------+-----+---------+-------+
- 4 rows in set (0.00 sec)
- mysql> alter table emp01
- -> drop sex;
- Query OK, 0 rows affected (0.04 sec)
- Records: 0 Duplicates: 0 Warnings: 0
- mysql> desc emp01;
- +-----------+-------------+------+-----+---------+-------+
- | Field | Type | Null | Key | Default | Extra |
- +-----------+-------------+------+-----+---------+-------+
- | id | int | YES | | NULL | |
- | age | int | YES | | NULL | |
- | name_info | varchar(30) | YES | | NULL | |
- +-----------+-------------+------+-----+---------+-------+
- 3 rows in set (0.00 sec)
复制代码 5.重定名表
方法1:
rename table 表名
to 新表名;
- mysql> show tables;
- +------------------+
- | Tables_in_test03 |
- +------------------+
- | emp01 |
- | emp02 |
- | emp03 |
- +------------------+
- 3 rows in set (0.00 sec)
- mysql> rename table emp01
- -> to emp01_info;
- Query OK, 0 rows affected (0.03 sec)
- mysql> show tables;
- +------------------+
- | Tables_in_test03 |
- +------------------+
- | emp01_info |
- | emp02 |
- | emp03 |
- +------------------+
- 3 rows in set (0.00 sec)
复制代码 方法2:
alter table 表名
rename to 新表名;
- mysql> show tables;
- +------------------+
- | Tables_in_test03 |
- +------------------+
- | emp01_info |
- | emp02 |
- | emp03 |
- +------------------+
- 3 rows in set (0.00 sec)
- mysql> alter table emp01_info
- -> rename to emp01;
- Query OK, 0 rows affected (0.02 sec)
- mysql> show tables;
- +------------------+
- | Tables_in_test03 |
- +------------------+
- | emp01 |
- | emp02 |
- | emp03 |
- +------------------+
- 3 rows in set (0.00 sec)
复制代码 **6.删除表—drop **(在MySQL中,当一张数据表没有与其他任何数据表形成关联关系时,可以将当前数据表直接删除。)
数据和结构都被删除,
开释表的存储空间,
所有正在运行的相关事务被提交,
所有相关索引被删除,
因此drop table 语句不能回滚。
格式:
drop table 【if exists】 表名1 [, 表名2, …, 表名n];
if exists 的寄义为:如果当前数据库中存在相应的数据表,则删除数据表;如果当前数据库中不存在相应的数据表,则忽略删除语句,不再执行删除数据表的操作。
- mysql> show tables;
- +------------------+
- | Tables_in_test03 |
- +------------------+
- | emp01 |
- | emp02 |
- | emp03 |
- +------------------+
- 3 rows in set (0.00 sec)
- mysql> drop table if exists emp02;
- Query OK, 0 rows affected (0.04 sec)
- mysql> show tables;
- +------------------+
- | Tables_in_test03 |
- +------------------+
- | emp01 |
- | emp03 |
- +------------------+
- 2 rows in set (0.00 sec)
复制代码 7.清空表
删除表中所有的数据(只能全部清空)
但表结构生存,表还在
开释表的存储空间
truncate 语句不能回滚
格式:
truncate table 表名;
8.删除表—delete
删除表中的数据(不肯定全部清空,可以通过条件来指明要删除是哪部分数据)
表结构生存,表还在
开释表的存储空间
可以回滚
格式:
delete from 表名
where 条件;
commit :提交数据,一旦执行,则数据就被永久生存在数据库中,意味着数据不可回滚
rollback:回滚数据,一旦执行,可以实现数据的回滚,回滚到最近一次commit之后。
默认情况下 delete语句也是不可以实现回滚的,由于默认情况下会执行commit语句,但是在执行delete语句前,可以通过使用autocommit=false语句来实现不执行commit,从而实现回滚。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |