Mysql介绍和基本操作+高级操作详细说明

目录

一数据库原理

1.1数据库系统管理系统(DBMS)

1.2数据库系统

1.3数据库系统发展阶段

1.4DBMS数据库管理系统

1.5数据库管理系统的优点

1.6数据库管理系统的基本功能

1.7数据库系统的架构

1.8当今主数据库介绍

二,数据库类型

2.1关系型数据库

2.2关系型数据库相关概念

2.3常用关系数据库

2.4数据的操作

2.5数据库规划流程

三,非关系数据库介绍

3.1非关系数据库也被称作NoSQL(Not Only SQL)

3.2特点

三,安装MySQL

四,多实例介绍

六,管理数据库

七,管理数据库

八,实际操作

九,总结


一数据库原理

1.1数据库系统管理系统(DBMS)

是实现对数据库资源有效组织,管理和存取的系统软件

数据库的建立和维护功能,数据定义功能,数据操控功能,数据库的运行管理功能,通信功能

1.2数据库系统

是一个人机系统,由硬件,OS,数据库,DBMS,应用软件和数据库用户组成

用户可以通过DBMS或应用程序操作数据库

1.3数据库系统发展阶段

萌芽阶段:文件系统

使用磁盘文件来存储数据

出现了网络模型,层次模型的数据库

中级阶段:第二代数据库

关系数据库和结构化查询语言

高级阶段:新一代数据库

“关系-对象”型数据库

1.4DBMS数据库管理系统

  • Database:数据库是数据的汇集,它以一定的组织形式存于存储介质上

  • DBMS:是管理数据库的系统软件,它实现数据库系统的各种功能。是数据库系统的核心

  • DBA:负责数据库的规划、设计、协调、维护和管理等工作

  • 应用程序:指以数据库为基础的应用程序

1.5数据库管理系统的优点

相关联的数据的集合,较少的数据冗余,程序与数据互相独立,保证数据的安全,可靠。最大限度的保证数据的正确性,数据可以并发使用并能同时保证一致性。

1.6数据库管理系统的基本功能

数据定义

数据处理

数据安全

数据备份

1.7数据库系统的架构

单机架构

大型主机/终端架构

主从式架构(c/s)

分布式架构

1.8当今主数据库介绍

1.SQL Server(微软公司产品)

面向windows操作系统

简单,易用

2,Oracle(甲骨文公司产品)

面向所有主流平台

安全,完善,操作复杂

3.DB2(IBM公司产品)

面向所有主流平台

大型,安全,完善

4.MySQL(甲骨文公司收购)

免费开源体积小

二,数据库类型

2.1关系型数据库

关系数据库系统是基于关系模型的数据库系统

关系模型的数据结构使用简单易懂的二维数据表

关系数据库包含了实体,关系和属性三个要素

2.2关系型数据库相关概念

  • 关系Relational :关系就是二维表,其中:表中的行、列次序并不重要

  • 行row:表中的每一行,又称为一条记录record

  • 列column:表中的每一列,称为属性,字段,域field

  • 主键Primary key:PK , 用于惟一确定一个记录的字段,一张表只有一个主键

  • 域domain:属性的取值范围,如,性别只能是'男'和'女'两个值,人类的年龄只能0-150

2.3常用关系数据库

  • 关系型数据库:Oracle,、MySQL、SQL Server、Sybase、Informix、access、DB2、 FoxPRO
  • 应用举例:12306用户信息系统、淘宝账号系统、联通手机号信息系统、银行用户账号系统、网站用户信息系统

2.4数据的操作

数据提取:在数据集合中提取感兴趣的内容。SELECT

数据更新:变更数据库中的数据。INSERT,DELETE,UPDATE

2.5数据库规划流程

收集数据,得到字段,手机必要且完整的数据项转换成数据表的字段

三,非关系数据库介绍

3.1非关系数据库也被称作NoSQL(Not Only SQL)

非存储数据不以关系模型为依据,不需要固定的表格是

非关系数据库的优点:

1易于维护:使用表结构,格式一致

2使用方便:SQL语言通用,可用于复杂查询

3复杂操作:支持SQL,可用于一个表以及多个表之间非常复杂的查询

缺点:

1读写性能比较差,尤其是海量数据的高效率读写

2固定的表结构,灵活性稍欠

3高并发读写需求,传统关系型数据库来说,硬盘I/O是一个很大的瓶颈。

3.2特点

性能卓越,服务稳定

开源,无版权限制,成本低

多线程,多用户

基于C/S(客户端/服务器)架构

安全可靠

三,安装MySQL

yum安装,编译安装参考架构

MySQL组成:

客户端程序

  • mysql: 交互式的CLI工具

  • mysqladmin:基于mysql协议管理mysqld

  • mysqlimport:数据导入工具

    MyISAM存储引擎的管理工具:

  • myisamchk:检查MyISAM库

  • myisampack:打包MyISAM表,只读

服务器端程序

  • mysqld_safe

  • mysqld

  • mysqld_multi 多实例 ,示例:mysqld_multi

yum install mariadb-server -y    #yum安装mysql
systemctl start mariadb.service
mysql
mysql_secure_installation

mysql命令:

mysql [OPTIONS] [database]
命令格式

-A, --no-auto-rehash 禁止补全
-u, --user= 用户名,默认为root
-h, --host= 服务器主机,默认为localhost
-p, --passowrd= 用户密码,建议使用-p,默认为空密码
-P, --port= 服务器端口
-S, --socket= 指定连接socket文件路径
-D, --database= 指定默认数据库
-C, --compress 启用压缩
-e   "SQL" 执行SQL命令
-V, --version 显示版本
-v  --verbose 显示详细信息
--print-defaults 获取程序默认使用的配置

#默认空密码登录
mysql  -uroot  -p

mysql>use mysql #切换数据库
mysql> select database();                   #查看当前数据库
mysql>select user(); #查看当前用户
mysql>SELECT User,Host,Password FROM user;
mysql>system clear #清屏
mysql> ^DBye       #ctrl+d 退出

mysqladmin命令

mysqladmin [OPTIONS] command command...

#查看mysql服务是否正常,如果正常提示mysqld is alive
mysqladmin -u用户 -p密码   ping
mysqladmin -uroot -p123123  ping
#关闭mysql服务,但mysqladmin命令无法开启
mysqladmin -uroot -pcentos shutdown
#创建数据库testdb
mysqladmin -uroot -pcentos   create testdb 
#删除数据库testdb
mysqladmin -uroot -pcentos   drop testdb
#修改root密码
mysqladmin -uroot -pcentos password 'magedu'
#日志滚动,生成新文件/var/lib/mysql/mariadb-bin.00000N
mysqladmin -uroot -pcentos flush-logs

四,多实例介绍

什么是数据库多实例

多实例类似微信双开,端口号类比微信账号,数据库类比聊天窗口,表类比聊天记录

MySQL多实例就是在一台服务器上同时开启多个不同的服务端口(如3306,3307,3308等),同时运行多个MySQL服务进程,这些服务进程通过不同的Socket监听不同的服务端口来提供服务。

多实例可能是MySQL的不同版本,也可能是MySQL的同一版本实现。

多实例的好处

可有效利用服务器资源。相当单个服务求资源有限时候,可以充分利用剩余资源提供过多的服务,且可以实现资源的逻辑隔离节约服务器资源。例如,公司服务器资源紧张,但是数据库又需要各自尽量独立的提供服务,并且还需要到主从复制等技术,多实例就是最佳的选择。

  • 多实例弊端

存在资源互相抢占的问题。比如:当某个数据库实例并发很高或者SQL查询慢时,整个实例会消耗

大量的CPU、磁盘I/O等资源,导致服务器上面其他的数据库实例在提供服务的质量也会下降,所以

具体的需求要根据自己的实际情况而定。

五,MySQL数据库管理基本操作

数据库——>数据表——>行(记录):用来描述一个对象的信息

数据库——>数据表——>列(字段):用来描述对象的一个属性

常用的数据类型:

int:整型

float:单精度浮点4字节32位

double:双精度浮点8字节64位

char:固定长度的字符类型

varchar:可变长度的字符类型

text:文本

image:图片

decimal(5,2):5个有效长度数字,小数点后面又2位

六,SQL分类

  • 数据库:database

  • 表:table,行:row 列:column

  • 索引:index

  • 视图:view

  • 存储过程:procedure

  • 存储函数:function

  • 触发器:trigger

  • 事件调度器:event scheduler,任务计划

  • 用户:user

  • 权限:privilege

SQL 语言规范

在数据库系统中,SQL 语句不区分大小写,建议用大写

SQL语句可单行或多行书写,默认以 " ; " 结尾

关键词不能跨多行或简写

用空格和TAB 缩进来提高语句的可读性

子句通常位于独立行,便于编辑,提高可读性

数据库对象和命名

数据库的组件(对象):

数据库、表、索引、视图、用户、存储过程、函数、触发器、事件调度器等

命名规则:

必须以字母开头,后续可以包括字母,数字和三个特殊字符(# _ $)

不要使用MySQL的保留字,tabble select show databases

mysql>help create  #help后面跟上具体命令可以查看帮助
show charset;
#查看支持字符集
mysql> show databases;
#查看当前数据库
mysql> use mysql;
#使用 mysql表
MySQL root@localhost:school> select * form  lgy;
#查看ky15表格的

六,管理数据库

6.1创建数据库

cd /etc/yum.repos.d
vim mysql.repo
[mysql]
name=mysql5.7
baseurl=https://mirrors.tuna.tsinghua.edu.cn/mysql/yum/mysql-5.7-community-el7-x86_64/
gpgcheck=0
yum -y install mysql-community-server
systemctl start mysqld
ss -ntap |grep 3306
mysql -u root -p
grep password /var/log/mysqld.log
mysql -u root -p'/1Dva;aSyf=?'
status
alter user root@'localhost' identified by 'Lgy147896325.';  #更改密码
mysql>use mysql #切换数据库
mysql> select database();                   #查看当前数据库
mysql>select user(); #查看当前用户
mysql>SELECT User,Host,Password FROM user;
mysql>system clear #清屏
mysql> ^DBye       #ctrl+d 退出


#查看mysql版本
[root@centos7 ~]#mysql -V



#修改提示符

[root@localhost ~]#vim /etc/my.cnf                       
[mysql]
prompt=(\\u@\\h) [\\d]>\\_
auto-rehash



mysqladmin命令

mysqladmin [OPTIONS] command command...

#查看mysql服务是否正常,如果正常提示mysqld is alive
mysqladmin -u用户 -p密码   ping
mysqladmin -uroot -p123123  ping
#关闭mysql服务,但mysqladmin命令无法开启
mysqladmin -uroot -pcentos shutdown
#创建数据库testdb
mysqladmin -uroot -pcentos   create testdb 
#删除数据库testdb
mysqladmin -uroot -pcentos   drop testdb
#修改root密码
mysqladmin -uroot -pcentos password 'magedu'
#日志滚动,生成新文件/var/lib/mysql/mariadb-bin.00000N
mysqladmin -uroot -pcentos flush-logs

七,管理数据库

7.1创建数据库

mysql> create database lgy;
Query OK, 1 row affected (0.00 sec)

mysql> show create database lgy;
+----------+----------------------------------------------------------------+
| Database | Create Database                                                |
+----------+----------------------------------------------------------------+
| lgy      | CREATE DATABASE `lgy` /*!40100 DEFAULT CHARACTER SET latin1 */ |
+----------+----------------------------------------------------------------+
1 row in set (0.00 sec)

7.2修改数据库

ALTER DATABASE DB_NAME character set utf8;

7.3删除数据库

mysql> drop database lgy1;
Query OK, 0 rows affected (0.00 sec)

7.4查看数据库列表

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| db1                |
| lgy                |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
6 rows in set (0.00 sec)

mysql> 

7.5数据类型

MySQL支持多种内置数据类型

数值类型

日期/时间类型

字符串(字符)类型

选择正确的数据类型对于获得高性能至关重要,三大原则:

  1. 更小的通常更好,尽量使用可正确存储数据的最小数据类型

  2. 简单就好,简单数据类型的操作通常需要更少的CPU周期

  3. 尽量避免NULL,包含为NULL的列,对MySQL更难优化

7.5.1整数型

tinyint(m) 1个字节 范围(-128~127)

smallint(m) 2个字节 范围(-32768~32767)

mediumint(m) 3个字节 范围(-8388608~8388607)

int(m) 4个字节 范围(-2147483648~2147483647)

bigint(m) 8个字节 范围(+-9.22*10的18次方)

上述数据类型,如果加修饰符unsigned后,则最大值翻倍

如:tinyint unsigned的取值范围为(0~255)

7.5.2浮点型(float和double),近似值

float(m,d) 单精度浮点型 8位精度(4字节) m总个数,d小数位, 注意: 小数点不占用总个数

double(m,d) 双精度浮点型16位精度(8字节) m总个数,d小数位, 注意: 小数点不占用总个数

设一个字段定义为float(6,3),如果插入一个数123.45678,实际数据库里存的是123.457,但总个数还以实际为准,即6位

7.5.3定点数

        在数据库中存放的是精确值,存为十进制 decimal(5.2) 100.01 - 999.99格式 decimal(m,d) 表示 最多 m 位数字,其中 d 个小数,小数点不算在长度内比如: DECIMAL(6,2) 总共能存6位数字,末尾2位是小数,字段最大值 9999.99 (小数点不算在长度内)参数m<65 是总个数,d<30且 d<m 是小数位

        MySQL5.0和更高版本将数字打包保存到一个二进制字符串中(每4个字节存9个数字)。

        例如: decimal(18,9)小数点两边将各存储9个数字,一共使用9个字节:其中,小数点前的9个数字用4个字节,小数点后的9个数字用4个字节,小数点本身占1个字节。

        浮点类型在存储同样范围的值时,通常比decimal使用更少的空间。float使用4个字节存储。double占用8个字节因为需要额外的空间和计算开销,所以应该尽量只在对小数进行精确计算时

7.5.4字符串(char,varchar,text)

char(n) 固定长度,最多255个字符,注意不是字节

varchar(n) 可变长度,最多65535个字符

tinytext 可变长度,最多255个字符

text 可变长度,最多65535个字符

mediumtext 可变长度,最多2的24次方-1个字符

longtext 可变长度,最多2的32次方-1个字符

BINARY(M) 固定长度,可存二进制或字符,长度为0-M字节

VARBINARY(M) 可变长度,可存二进制或字符,允许长度为0-M字节

内建类型:ENUM枚举, SET集合

八,实际操作

常用的数据类型:
int:整型						用于定义整数类型的数据
float:单精度浮点4字节32位		准确表示到小数点后六位		
double:双精度浮点8字节64位
char:固定长度的字符类型		用于定义字符类型数据。
varchar:可变长度的字符类型		
text:文本
image:图片
decimal(5,2):5个有效长度数字,小数点后面有2位		指定长度数组
#Char如果存入数据的实际长度比指定长度要小,会补空格至指定长度,
#如果存入的数据的实际长度大于指定长度,低版本会被截取,高版本会报错

查看数据库结构

SQL语言分类:
DDL:数据定义语言,用于创建数据库对象,如库、表、索引等。(create )
DML:数据操纵语言,用于对表中的数据进行管理,用来插入、删除和修改数据库中的数据(insert drop delete update )
DQL:数据查询语言,用于从数据表中查找符合条件的数据记录(select )
DCL:数据控制语言,用于设置或者更改数据库用户或角色权限(grant )
(数据控制语句,用于控制不通数据段直接的许可和访问级别的语句,这些语句定义了数据库、表、字段、用户的访问权限和安全级别,如COMMIT、ROLLBACK、GRANT、REVOKE)

查看数据库结构

mysql> show databases;    #大小写不区分,分号“;”表示结束
+--------------------+
| Database           |
+--------------------+
| information_schema |
| info               |
| lgy                |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
6 rows in set (0.00 sec)


2####查看数据库中包含的表###
use 数据库名
use mysql;  ##切换到mysql下
mysql> show tables in mysql;    查看数据库中表
+---------------------------+
| Tables_in_mysql           |
+---------------------------+
| columns_priv              |
| db                        |
| engine_cost               |
| event                     |
| func                      |
| general_log               |
| gtid_executed             |
| procs_priv                |
| time_zone_transition_type |
| user                      |
+---------------------------+
31 rows in set (0.00 sec)


3####查看表结构(字段)####
格式:describe [数据库名.]表名;
desc user;
desc servers;
#查看表结构
可以切换方式查看表
mysql> use mysql
Database changed
mysql> desc servers;
+-------------+----------+------+-----+---------+-------+
| Field       | Type     | Null | Key | Default | Extra |
+-------------+----------+------+-----+---------+-------+
| Server_name | char(64) | NO   | PRI |         |       |
| Host        | char(64) | NO   |     |         |       |
| Db          | char(64) | NO   |     |         |       |
| Username    | char(64) | NO   |     |         |       |
| Password    | char(64) | NO   |     |         |       |
| Port        | int(4)   | NO   |     | 0       |       |
| Socket      | char(64) | NO   |     |         |       |
| Wrapper     | char(64) | NO   |     |         |       |
| Owner       | char(64) | NO   |     |         |       |
+-------------+----------+------+-----+---------+-------+
9 rows in set (0.01 sec)

desc mysql.servers;
#不想先使用数据库可以使用上面的  可以跳数据库看,不看字段
desc servers\G;  ####可以使用列查看


#创建新的数据库####
CREATE DATABASE 数据库名;

###2.创建新的表####
create table 表名 (字段1 数据类型,字段2 数据类型[,...] [,PRIMARY KEY (主键名)]);
#主键一般选择代表唯一性的字段不允许为空值(null),且一个表只能有一个主键###

例:
CREATE DATABASE lgy; .
USE lgy;
CREATE TABLE ll (id int NOT NULL,name char(10) NOT NULL,score decimal(5,2),passwd char(48)   DEFAULT '',PRIMARY KEY (id)) ;

desc info;
#查看表结构

###管理表中的数据####
1.向数据表中插入新的数据记录
insert into 表名(字段1,字段2,字段3) values(字段1的值,字段2的值,字段3的值);
mysql> insert into ll (id,name,score,passwd) values (2,'cr',80,'12456');
Query OK, 1 row affected (0.00 sec)

mysql> select * from ll;
+----+------+-------+--------+
| id | name | score | passwd |
+----+------+-------+--------+
|  1 | qjw  | 61.00 | 123456 |
|  2 | cr   | 80.00 | 12456  |
+----+------+-------+--------+
2 rows in set (0.00 sec)

SELECT * FROM ll;     #查询表的全部数据记录

2.查询数据记录
SELECT 字段名1,字段名2[,...] FROM 表名 [WHERE 条件表达式];
mysql> select name number from ll;
+--------+
| number |
+--------+
| qjw    |
| cr     |
+--------+
2 rows in set (0.00 sec)

mysql> select name number from ll where id=2;
+--------+
| number |
+--------+
| cr     |
+--------+
1 row in set (0.00 sec)

SELECT * FROM ll WHERE id < 2
#id小于2的
select * from ll where age=22;
#只找22岁的
select * from ll where age=22 and name='cr';
#只找22岁和名字叫cr的

select * from ll limit 2;
#加上limit选项可以看前几行
select * from ll limit 2,3;
#第二行之后的前三行

3 修改、更新数据表中的数据记录
update 表名 set 字段名1=修改字段值1 ,字段名2=修改的字段值2 [where 条件表达式]

mysql> update ll set name='xka',score='99'where id=3;
Query OK, 1 row affected (0.00 sec)
Rows matched: 1  Changed: 1  Warnings: 0

mysql> select * from ll;
+----+------+--------+--------+
| id | name | score  | passwd |
+----+------+--------+--------+
|  1 | qjw  |  61.00 | 123456 |
|  2 | cr   |  80.00 | 12456  |
|  3 | xka  |  99.00 | 156    |
|  4 | xd   | 100.00 | 16     |
+----+------+--------+--------+
4 rows in set (0.00 sec)


4 在数据表中删除指定的数据记录
delete from 表名 [where 条件表达式]

delete from 表名
将整个表中的数据整个删除

mysql> delete from ll where id=4;
Query OK, 1 row affected (0.00 sec)

mysql> select * from ll;
+----+------+-------+--------+
| id | name | score | passwd |
+----+------+-------+--------+
|  1 | qjw  | 61.00 | 123456 |
|  2 | cr   | 80.00 | 12456  |
|  3 | xka  | 99.00 | 156    |
+----+------+-------+--------+
3 rows in set (0.00 sec)

修改表名和表结构

1 修改表名
alter table 旧表名 rename 新表名;
mysql> alter table ll rename lg;
Query OK, 0 rows affected (0.01 sec)

mysql> select * from lg;
+----+------+-------+--------+
| id | name | score | passwd |
+----+------+-------+--------+
|  1 | qjw  | 61.00 | 123456 |
|  2 | cr   | 80.00 | 12456  |
|  3 | xka  | 99.00 | 156    |
+----+------+-------+--------+
3 rows in set (0.00 sec)

2扩展表结构(增加字段)
alter table 旧表名 add address varchar(50) default '居无定所';

mysql> alter table lg add address varchar(50) default'juwudingsuo';
Query OK, 0 rows affected (0.04 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> select * from lg;
+----+------+-------+--------+-------------+
| id | name | score | passwd | address     |
+----+------+-------+--------+-------------+
|  1 | qjw  | 61.00 | 123456 | juwudingsuo |
|  2 | cr   | 80.00 | 12456  | juwudingsuo |
|  3 | xka  | 99.00 | 156    | juwudingsuo |
+----+------+-------+--------+-------------+
3 rows in set (0.00 sec)

3 修改字段(列)名,添加唯一键
alter table 表名 change 旧列名 新列名 数据类型 [unique key];
unique key 唯一键,可以为多个

mysql> alter table lg change score use_name varchar(10) unique key;
Query OK, 3 rows affected (0.02 sec)
Records: 3  Duplicates: 0  Warnings: 0

mysql> select * from lg;
+----+------+----------+--------+-------------+
| id | name | use_name | passwd | address     |
+----+------+----------+--------+-------------+
|  1 | qjw  | 61.00    | 123456 | juwudingsuo |
|  2 | cr   | 80.00    | 12456  | juwudingsuo |
|  3 | xka  | 99.00    | 156    | juwudingsuo |
+----+------+----------+--------+-------------+
3 rows in set (0.00 sec)


4删除字段
alter table info drop sex;
alter table 表名  drop 字段名;

mysql> alter table lg drop address;
Query OK, 0 rows affected (0.04 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> select * from lg;
+----+------+----------+--------+
| id | name | use_name | passwd |
+----+------+----------+--------+
|  1 | qjw  | 61.00    | 123456 |
|  2 | cr   | 80.00    | 12456  |
|  3 | xka  | 99.00    | 156    |
+----+------+----------+--------+
3 rows in set (0.00 sec)

案列扩展

(root@localhost) [lgy]> create table if not exists lf(id int(4) zerofill primary key auto_increment, name varchar(10)not null,cardid int(18) not null unique key,hobby varchar(50));
Query OK, 0 rows affected (0.00 sec)
#if not exists:表示检测要创建的表是否已存在,如果不存在就继续创建
#int(4) zerofill:表示若数值不满4位数,则前面用"0"填充,例0001
#auto_increment:表示此字段为自增长字段,即每条记录自动递增1,默认从1开始递增;
自增长字段数据不可以重复;自增长字段必须是主键;如添加的记录数据没有指定此字段的值且
添加失败也会自动递增一次
#unique key:表示此字段唯一键约束,此字段数据不可以重复:一张表中只能有一个主键,但是一张表中可以有多个唯一键
#not null:表示此字段不允许为NULL

-----------------------------------------数据表高级操作------------------------------------------------------------------

1.克隆表,将数据表的数据记录生成到新的表中
方法一:
create table test2 like test1;       #通过 LIKE 方法,复制test1表结构生成test2表
insert into test01 select * from test1;

方法二:
CREATE TABLE test01 (SELECT * from test1);
show create table test02\G      #获取数据表的表结构、索引等信息
SELECT * from test02;

举例:
(root@localhost) [lgy]> create table test2 (select *from test1);
Query OK, 3 rows affected (0.01 sec)
Records: 3  Duplicates: 0  Warnings: 0



2.清空表,删除表内的所有数据
方法一
delete from test01;
#DELETE清空表后,返回的结果内有删除的记录条目;DELETE工作时是一行一行的删除记录数据的;如果表中有自增长字段,使用DELETE FROM删除所有记录后,再次新添加的记录会从原来最大的记录ID后面继续自增写入记录。
举例:
delete from test1
(root@localhost) [lgy]> insert into test1 (name,genter) values('sd','m');
Query OK, 1 row affected (0.00 sec)
(root@localhost) [lgy]> select * from test1;
+----+------+--------+
| id | name | genter |
+----+------+--------+
|  4 | sd   | m      |
+----+------+--------+
1 row in set (0.00 sec)


方法二:
truncate table test01;
#TRUNCATE清空表后,没有返回被删除的条目;TRUNCATE工作时是将表结构按原样重新建立,因此在速度上TRUNCATE会比DELETE清空表快;使用TRUNCATE TABLE清空表内数据后,ID会从1开始重新记录。
举例:
(root@localhost) [lgy]> truncate table test1;
Query OK, 0 rows affected (0.01 sec)

(root@localhost) [lgy]> insert into test1 (name,genter) values('sd','m');
Query OK, 1 row affected (0.00 sec)

(root@localhost) [lgy]> select * from test1;
+----+------+--------+
| id | name | genter |
+----+------+--------+
|  1 | sd   | m      |
+----+------+--------+
1 row in set (0.00 sec)


3.创建临时表
临时表创建成功之后,使用 SHOW TABLES 命令是看不到创建的临时表的,临时表会在连接退出后被销毁。
如果在退出连接之前,也可以可执行增删改查等操作,比如使用DROP TABLE语句手动直接删除临时表。

CREATE TEMPORARY TABLE 表名 (字段1 数据类型,字段2 数据类型[,...][,PRIMARY KEY (主键名)]);

例:
create temporary table test03 (
id int(4) zerofill primary key auto_increment,
name varchar(10) not null,
cardid int(18) not null unique key,
hobby varchar (50));

insert into test3 values (1,'sz','123456','running');

select * from test3;
show tables;

quit
select * from test3;

4.创建外键约束,保证数据的完整性和一致性

外键的定义:如果同一个属性字段X在表一中是主键,而在表二不是主键,则字段X称为表二的外键。

主键表和外键表的理解:
(1)、以公共关键字作主键的表为主键表(父表,主表)
(2)、以公共关键字作外键的表为外键表(从表、外表)

注意:与外键关联的主表的字段必须设置为主键。要求从表不能是临时表,主从表的字段具备相同的数据类型、字符长度和约束。

#创建主表test4
create table test4 (hobid int(4),hobname varchar(50));

#创建从表test5
create table test5 (id int(4) primary key auto_increment,name varchar(10),age int(3),hobid int(4));

#为主表test4添加一个主键约束。主键名建议以 “PK_” 开头。
alter table test4 add constraint PK_hobid primary key (hobid);

#为从表test05表添加外键,并将test05 表的hobid 字段和test04 表的hobid字段建立外键关联。外键名建议以 “FK_” 开头。
alter table test5 add constraint FK_hob foreign key (hobid) references test4 (hobid);

desc test5;

#插入新的数据记录时,要先主表再从表
insert into test4 values(1,'runing');
insert into test5 values(1,'zhangsan',18,1);

#删数数据记录时,要先从表再主表,也就是说删除主键表时必须先删除其他与之关联的表。
drop tables test5;
drop tables test4;

#查看和删除外键约束
show create table test5; .
alter table test5 drop foreign key FK_hob;
alter table test5 drop key FK_hob;
desc test5;

MySQL中6种常见的约束:
主键约束(primary key)
外键约束(foreign key)
非空约束(not null)
唯一性约束(unique [key|index] )
默认值约束(default) 
自增约束(auto_increment)

九,总结

#删除类型
drop table table_name
1)属于DDL
2)不可回滚(无法恢复)
3)不可带where
4)表内容和结构删除
5)删除速度快

truncate table table_name
1)属于DDL
2)不可回滚
3)不可带where
4)表内容删除
5)删除速度快

delete from table_name
1)属于DML
2)可回滚(可恢复)
3)可带where
4)表结构在,表内容要看where执行的情况
5)册删除速度慢,需要逐行删除

不再需要一张表的时候,用drop
想删除部分数据行时候,用delete,并且带上where子句
保留表而删除所有数据的时候用truncate

#删除
速度
drop> truncate > delete
安全性
delete 最好

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值