MySQL 第三天(数据库的三种备份,约束条件4个,表操作)

本文详细介绍了MySQL数据库的权限系统,包括默认的mysql数据库中的用户、权限表,以及如何创建、删除和管理用户。此外,还讨论了如何进行权限分配,如grant、revoke命令,以及如何查看和刷新权限。同时,文章涵盖了表的完整性约束,如主键(primary key)、唯一约束(unique)和非空约束(not null),以及如何修改表结构和数据。
摘要由CSDN通过智能技术生成

5/26/21

写在前面:两份笔记,懒得分开了。以===分割

Mysql权限

四个默认的数据库里存储着与 MySQL相关的配置信息和一些基本数据

mysql> show databases;		#查看当前所有的数据库
+--------------------+
| Database           |
+--------------------+
| information_schema |			#元数据,保存关于MySQL服务器所维护的所有其他数据库信息
| mysql              |		#关于系统访问权限和授权信息
| performance_schema |		#优化引擎,版本不同默认的开启关闭状态也不同,主要用于收集数据库服务器性能参数
| sys                |		#降低performance_schema数据库的复杂程度。其内容主要来自于performance_schema数据库
+--------------------+
4 rows in set (0.00 sec)
mysql> use mysql						#进入mysql数据库
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
mysql> show tables;			#查看这个数据库里都有啥表
+---------------------------+
| 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)

账户管理

1.登录和退出数据库
-h 指定主机和ip地址的
-u 指定登录的用户user
-p 指定登录密码password
-P 指定登录MySQL的端口号port(默认3306)
-e 直接执行MySQL语句,-e后接指令(详细参考第二天的)

	# mysql -uroot -p'QianFeng@123' -e "create database test1"	#创建一个名为test1的数据库
	# mysql -uroot -p'QianFeng@123' -e "use test1;create table student(name char(20),age int(3))"		#创建表,同时定义字段名和数据类型

例子如下:

	# mysql -hlocalhost -uroot -pxxx -e"select * from user\G"		#登录本机的root账户,密码为xxx,并执行整齐查询user数据库的命令

2.退出数据库的三种方式:
exit
quit
\q

3.创建和删除用户
先查看用户之类的信息

select user,host,authentication_string from mysql.user;		
##从mysql数据库的user表中查看用户主机和验证字符串

创建用户

create user '要添加的用户名'@'该用户的IP地址' identified by '登录数据库的密码'

create user 'user1'@'8.140.10.160' identified by '123Qwe.';

跳过密码进入数据库

# vim /etc/my.cnf
validate-password=OFF	#关闭mysql密码强度策略,生产环境切勿尝试,首次启动不可关闭
skip-grant-tables		#跳过密码进入数据库,用于忘记密码时使用

4.删除用户的两种方式:

mysql> drop user 'user33'@'192.168.230.135';
mysql> delect from mysql.user where user 'user33';

5.通过各种命令修改密码(花式修改密码):

通过mysqladmin命令修改密码
通过set命令修改密码

 	set password for 'mike'@=password('123')
 	set password for '用户名'@’地址’=password('新密码');

alter修改密码

6.忘记密码

7.强制刷新数据表

mysql> FLUSH PRIVILEGES;		#flush privileges;重新登录数据库后,强制刷新数据表

权限管理

  1. 授权
##给某用户添加一个查看和修改的权限,
grant insert,select on 数据库名.表名 to '要授权的用户名'@'地址' identified by ' 密码(请注意密码强度,是你自己新创建的密码)'
grant insert,select on *.* to 'mike'@'' identified by 'Admin123'
##给mike用户添加查看和修改的权限,可以查看修改所有数据库及表
		mysql> select host,user,insert_priv,select_priv from mysql.user where user='刚刚授权的用户名';

  1. 查看权限
SHOW GRANTS FOR 'username'@'hostname';		#查看权限
  1. 收回权限
revoke <privileges> on <数据库.表> from <'username'@'hostname'>;		#收回权限,怎么给的权限怎么收回
mysql> revoke insert,select on *.* from 'mike'@'';		#收回mike用户的修改和查看的权限
mysql> select host,user,insert_priv,select_priv from mysql.user where user='mike'	
##查看mike用户的权限,会发现此时权限已经变成N了

MySQL 8.0版本

CREATE USER '你的用户名'@'localhost' IDENTIFIED BY '你的密码';
#创建新的用户
GRANT ALL PRIVILEGES ON 你的数据库名.* TO '你的用户名'@'localhost';
#把刚刚创建的数据库的管理权限给予刚刚创建的MySQL用户
FLUSH PRIVILEGES;
#刷新权限,使用设置生效

关于数据库备份的一些知识

两种方式:备份和冗余(避免硬件故障)

备份的对象,三个:databases ;binlog ;my.cnf

备份一般远程存放,多副本备份,测试环境做日常回复演练,恢复比备份更重要。
种类:

  1. 完全备份
  2. 增量备份
  3. 差异备份,占用空间比增量大,比完整备份小,恢复时仅需要恢复到第一个完整版本和最后一次差异版本,恢复速度介于完整备份和增量备份之间。

备份包括物理备份和逻辑备份

操作

物理备份

直接复制数据库文件,适用于大型数据库环境,不受存储引擎的限制,但不能恢复到不同的MySQL版本。

1.准备环境
centos7
yum方式安装的mysql操作

1、完全备份

##1、安装xtrabackup工具(此工具是percona公司发布的)
[root@bogon ~]# yum -y install wget
[root@bogon ~]# wget https://www.percona.com/downloads/XtraBackup/Percona-XtraBackup-2.4.4/binary/redhat/7/x86_64/percona-xtrabackup-24-2.4.4-1.el7.x86_64.rpm
[root@bogon ~]# yum -y install percona-xtrabackup-24-2.4.4-1.el7.x86_64.rpm

##完全备份
##1、创建备份目录
[root@bogon ~]# mkdir -p /xtrabackup/full
##2、开始备份
[root@bogon ~]# innobackupex --user=root --password='你数据库的密码' /xtrabackup/full

##备份恢复
##1、关闭数据库并清理环境
[root@bogon ~]# systemctl stop mysqld
[root@bogon ~]# rm -rf /var/lib/mysql/*
[root@bogon ~]# rm -rf /var/log/mysqld.log
[root@bogon ~]# rm -rf /var/log/mysql-slow/slow.log
##2、验证恢复
[root@bogon ~]# innobackupex --apply-log /xtrabackup/full/2021-05-26_00-14-26
##3、确认数据库目录
##查看配置文件/etc/my.cnf中datadir的位置:
cat /etc/my.cnf
[mysqld]
datadir=/var/lib/mysql
##4、恢复数据
innobackupex --copy-back /xtrabackup/full/2021-05-26_16-56-44/
##5、给数据库目录修改权限
chown mysql.mysql /var/lib/mysql -R
##启动数据库
systemctl restart mysqld
##最后登录数据库正常

2、增量备份

原理:备份的是,上一次备份到现在产生的新数据(接1、完全备份,这里测试就不删除了)

##基于上一次的完整备份
##模拟修改数据库,增加一条数据
mysql> insert into testdb.t1 values(2);
mysql> exit
innobackupex --user=root --password='%i+g10uS.dre' --incremental /xtrabackup/ --incremental-basedir=/xtrabackup/2021-05-26_17-42-23/
##--incremental-basedir=/xtrabackup/时间字符的文件,这个备份的文件是你上一次备份的文件,相当于在上次备份的基础上,再进行备份
##再进行增量备份的时候同上


##备份恢复
##1、停止数据库并清理环境(模拟数据库数据丢失)
systemctl stop mysqld
rm -rf /var/lib/mysql/*

##2、使用--redo log 重演回滚,恢复数据。
innobackupex --apply-log --redo-only /xtrabackup/2021-05-26_19-58-54
#这个文件是第一次完全备份的文件
innobackupex --apply-log --redo-only /xtrabackup/2021-05-26_19-58-54/ --incremental-dir=/xtrabackup/2021-05-26_20-01-58/
#前面是第一次完全备份的文件,后面是第一次增量备份的文件
innobackupex --apply-log --redo-only /xtrabackup/2021-05-26_19-58-54/ --incremental-dir=/xtrabackup/2021-05-26_20-04-24/
#前面是第一次完全备份的文件,后面是第二次增量备份的文件,以此类推。
##回滚结束,copy完整备份的文件
innobackupex --copy-back /xtrabackup/2021-05-26_19-58-54/
##3、修改权限并启动数据库
chown -R mysql.mysql /var/lib/mysql
systemctl restart mysqld

差异备份

##清理备份环境
rm -rf /xtrabackup/*

先不写差异备份的了,我学的不好,暂时还没发现差异备份跟增量备份有啥太大的区别,除了少了一步。。

========================================================================================================================================================

表的完整性约束(4个)

作用:用于保证数据的完整性和一致性

约束条件说明
primary key(PK)
auto_increment
unique
null
mysql> create table t9(hostname char(20),ip char(150),primary key(hostname));
Query OK, 0 rows affected (0.51 sec)
##给哪一个字段加约束条件,给hostname字段加约束条件,真正加了两个字段,最后一个是约束条件。
mysql> desc t9;
+----------+-----------+------+-----+---------+-------+
| Field    | Type      | Null | Key | Default | Extra |
+----------+-----------+------+-----+---------+-------+
| hostname | char(20)  | NO   | PRI | NULL    |       |
| ip       | char(150) | YES  |     | NULL    |       |
+----------+-----------+------+-----+---------+-------+
2 rows in set (0.00 sec)
##会看到key里面多路一个PRI 主要约束条件。那加约束条件有什么用呢?
mysql> insert into t9(hostname,ip) values('zhao','10.10.10.11');
Query OK, 1 row affected (0.14 sec)
##这里给两个字段加上内容,然后再加一条
mysql> insert into t9(hostname,ip) values('zhao','10.10.10.12');
ERROR 1062 (23000): Duplicate entry 'zhao' for key 'PRIMARY'
##会发现报错了,它会告诉你不允许重复,能加就能删,那怎么才能删呢?
mysql> alter table t9 drop primary key;
Query OK, 1 row affected (0.34 sec)
Records: 1  Duplicates: 0  Warnings: 0
##这里就把主键删掉了。alter 更新 
mysql> desc t9;
+----------+-----------+------+-----+---------+-------+
| Field    | Type      | Null | Key | Default | Extra |
+----------+-----------+------+-----+---------+-------+
| hostname | char(20)  | NO   |     | NULL    |       |
| ip       | char(150) | YES  |     | NULL    |       |
+----------+-----------+------+-----+---------+-------+
2 rows in set (0.01 sec)
##key下面已经没有约束了,然后我们再插入数据看看
mysql> insert into t9(hostname,ip) values('zhao','10.10.10.12');
Query OK, 1 row affected (0.00 sec)

mysql> insert into t9(hostname,ip) values('zhao','10.10.10.13');
Query OK, 1 row affected (0.03 sec)

mysql> select * from t9;
+----------+-------------+
| hostname | ip          |
+----------+-------------+
| zhao     | 10.10.10.11 |
| zhao     | 10.10.10.12 |
| zhao     | 10.10.10.13 |
+----------+-------------+
3 rows in set (0.00 sec)
##这里再添加重复的,就又可以添加了。(像游戏账号,要是不加主键的话,就会有很多的账号都一样了)
##身份证号就不能重复。所有的账号类的都要加主键约束
##如果表已经创建了怎么加约束呢?
mysql> create table t10(hostname char(20),ip char(20));
Query OK, 0 rows affected (0.10 sec)

mysql> desc t10;
+----------+----------+------+-----+---------+-------+
| Field    | Type     | Null | Key | Default | Extra |
+----------+----------+------+-----+---------+-------+
| hostname | char(20) | YES  |     | NULL    |       |
| ip       | char(20) | YES  |     | NULL    |       |
+----------+----------+------+-----+---------+-------+
2 rows in set (0.00 sec)

mysql> alter table t10 add primary key(hostname);
Query OK, 0 rows affected (0.16 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> desc t10;
+----------+----------+------+-----+---------+-------+
| Field    | Type     | Null | Key | Default | Extra |
+----------+----------+------+-----+---------+-------+
| hostname | char(20) | NO   | PRI | NULL    |       |
| ip       | char(20) | YES  |     | NULL    |       |
+----------+----------+------+-----+---------+-------+
2 rows in set (0.00 sec)
##添加primary key完成。

######################
#####################
########################
##总结
#1. primary key 的增加删除添加
##关于主键:每张表里只能有一个主键,不能为空,而且唯一,主键保证记录的唯一性,主键自动为NOT NULL。一个UNIQUE KEY 又是NOT NULL的时候,它被当作是primary key主键。
##2. 两种添加方式:
##表存在添加。alter table xx add primary key(字段);
##创建表指定约束。上边有

2.第二个约束条件
auto_increment自增(自动编号)也叫主键,且必须 与主键组合使用的情况下,起始值为1,每次增量为1,当插入记录时,如果为auto_increment数列明确指明了一个数值,就会出现下面两种情况:
-如果插入值与已编辑的重复,就会报错,因为auto_increment必须唯一
-如果插入值大于已编号值,就会插入到数据列种,并使下一个编号从新值开始递增。
-每个表只能有一个字段设置成自增的,成了key才可以自动增长。

mysql> create table department3(dept_id int primary key auto_increment,dept_name varchar(30),comment varchar(50));
Query OK, 0 rows affected (0.18 sec)
##创建一个表加两个约束条件,一个是primary key 一个是auto_increment,两个结合使用
mysql> desc department3;
+-----------+-------------+------+-----+---------+----------------+
| Field     | Type        | Null | Key | Default | Extra          |
+-----------+-------------+------+-----+---------+----------------+
| dept_id   | int(11)     | NO   | PRI | NULL    | auto_increment |
| dept_name | varchar(30) | YES  |     | NULL    |                |
| comment   | varchar(50) | YES  |     | NULL    |                |
+-----------+-------------+------+-----+---------+----------------+
3 rows in set (0.00 sec)
##看看上边都多了哪些
mysql> insert into department3(dept_name,comment) values('tom','test1'),('jack','test2'),('alice','test3');
Query OK, 3 rows affected (0.00 sec)
Records: 3  Duplicates: 0  Warnings: 0
##给这个数据库插入数据,看下图会发现dept_id会自增。
mysql> select * from department3;
+---------+-----------+---------+
| dept_id | dept_name | comment |
+---------+-----------+---------+
|       1 | tom       | test1   |
|       2 | jack      | test2   |
|       3 | alice     | test3   |
+---------+-----------+---------+
3 rows in set (0.00 sec)

##自动自增会创建了,那怎么删除呢?看下面
##添加数据类型 dept_id字段 为非空就相当于删除了自动增长
mysql> alter table department3 change dept_id dept_id int not null;
Query OK, 3 rows affected (0.17 sec)
Records: 3  Duplicates: 0  Warnings: 0
mysql> desc department3;
+-----------+-------------+------+-----+---------+-------+
| Field     | Type        | Null | Key | Default | Extra |
+-----------+-------------+------+-----+---------+-------+
| dept_id   | int(11)     | NO   | PRI | NULL    |       |
| dept_name | varchar(30) | YES  |     | NULL    |       |
| comment   | varchar(50) | YES  |     | NULL    |       |
+-----------+-------------+------+-----+---------+-------+

##
##NOT NULL 表示该字段不能为空,可以修改。所有字段默认都是为空的NULL。
##

3.第三个约束:唯一约束:unique
字段添加为唯一约束后,该字段的值不能重复,也就是说在一列当中不能出现相同的值。

mysql> create table detartment2(dept_id int,dept_name varchar(30) unique,comment varchar(50));
Query OK, 0 rows affected (0.00 sec)
##这里是给dept_name添加唯一约束可以看到表中key的值
mysql> desc detartment2;
+-----------+-------------+------+-----+---------+-------+
| Field     | Type        | Null | Key | Default | Extra |
+-----------+-------------+------+-----+---------+-------+
| dept_id   | int(11)     | YES  |     | NULL    |       |
| dept_name | varchar(30) | YES  | UNI | NULL    |       |
| comment   | varchar(50) | YES  |     | NULL    |       |
+-----------+-------------+------+-----+---------+-------+
3 rows in set (0.00 sec)
##给表里加一些数据
mysql> insert into detartment2(dept_id,dept_name,comment) values('1','tom','ee'),('2','jak','ff'),('3','mike','jj');
Query OK, 3 rows affected (0.00 sec)
Records: 3  Duplicates: 0  Warnings: 0
##试着加名字相同的数据:发现报错,提示会告诉你这里有约束
mysql> insert into detartment2(dept_id,dept_name,comment) values('4','tom','aa');
ERROR 1062 (23000): Duplicate entry 'tom' for key 'dept_name'

4.NULL与NOT NULL
-默认字段,必须选择,并且用一个值。
-null 默认的都是 null 允许为空,也可以设置成not null(字段不允许为空),not null必须赋值。
-字段是否有缺省值,缺省的默认是null,如果说插入字段的时候不给字段赋值,那这个字段会使用默认值default,这个默认值也是得写出来的

mysql> create table t4(id int(5),name varchar(10),sex enum('male','female') not null default 'male');
Query OK, 0 rows affected (0.21 sec)
##创建一个表t4,三个字段,并且设置sex字段默认填male
mysql> desc t4;
+-------+-----------------------+------+-----+---------+-------+
| Field | Type                  | Null | Key | Default | Extra |
+-------+-----------------------+------+-----+---------+-------+
| id    | int(5)                | YES  |     | NULL    |       |
| name  | varchar(10)           | YES  |     | NULL    |       |
| sex   | enum('male','female') | NO   |     | male    |       |
+-------+-----------------------+------+-----+---------+-------+
3 rows in set (0.00 sec)

mysql> insert into t4(id,name) values(1,'tom');
Query OK, 1 row affected (0.00 sec)
##
##这里添加id和name字段,sex字段不添加,会看见sex字段默认male,自动填上。
##
mysql> select * from t4;
+------+------+------+
| id   | name | sex  |
+------+------+------+
|    1 | tom  | male |
+------+------+------+
1 row in set (0.00 sec)

default charset=utf8 可以指定中文

mysql> insert into t4(id,name) values(1,'三三');
ERROR 1366 (HY000): Incorrect string value: '\xE4\xB8\x89\xE4\xB8\x89' for column 'name' at row 1

mysql> create table t22(id int(5),name varchar(20),age int(5)) default charset=utf8;
Query OK, 0 rows affected (0.00 sec)
##
##添加字符集,再添加中文字符
##
mysql> insert into t22(id,name) values(1,'三三');
Query OK, 1 row affected (0.00 sec)
mysql> select * from t22;
+------+--------+------+
| id   | name   | age  |
+------+--------+------+
|    1 | 三三   | NULL |
+------+--------+------+
1 row in set (0.00 sec)

表操作

添加字段,添加多个字段 add … first change modify drop
数据更新 update +表名 + set +要修改的字段 +where +给谁修改 delete ,表结构修改
单表查询

1. 添加字段
##创建一个新表,并查看一下表结构
mysql> create table t100(id int(5),name varchar(10),age int(5));
Query OK, 0 rows affected (0.14 sec)
mysql> desc t100;
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id    | int(5)      | YES  |     | NULL    |       |
| name  | varchar(10) | YES  |     | NULL    |       |
| age   | int(5)      | YES  |     | NULL    |       |
+-------+-------------+------+-----+---------+-------+
3 rows in set (0.00 sec)

##给这个表添加一个字段
mysql> alter table t100 add hobby varchar(10);
Query OK, 0 rows affected (0.11 sec)
Records: 0  Duplicates: 0  Warnings: 0
##
##这样就添加进去了
##
mysql> desc t100;
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id    | int(5)      | YES  |     | NULL    |       |
| name  | varchar(10) | YES  |     | NULL    |       |
| age   | int(5)      | YES  |     | NULL    |       |
| hobby | varchar(10) | YES  |     | NULL    |       |
+-------+-------------+------+-----+---------+-------+
4 rows in set (0.00 sec)
##
##插入多个字段的方法。
##
mysql> alter table t100 add (shengao int(10),tizhong int(5));
Query OK, 0 rows affected (0.10 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> desc t100;
+---------+-------------+------+-----+---------+-------+
| Field   | Type        | Null | Key | Default | Extra |
+---------+-------------+------+-----+---------+-------+
| id      | int(5)      | YES  |     | NULL    |       |
| name    | varchar(10) | YES  |     | NULL    |       |
| age     | int(5)      | YES  |     | NULL    |       |
| hobby   | varchar(10) | YES  |     | NULL    |       |
| shengao | int(10)     | YES  |     | NULL    |       |
| tizhong | int(5)      | YES  |     | NULL    |       |
+---------+-------------+------+-----+---------+-------+
6 rows in set (0.00 sec)
##在一堆字段中间添加字段,拿表t100为例子
##先查看一下t100的表结构
mysql> desc t100;
+---------+-------------+------+-----+---------+-------+
| Field   | Type        | Null | Key | Default | Extra |
+---------+-------------+------+-----+---------+-------+
| id      | int(5)      | YES  |     | NULL    |       |
| name    | varchar(10) | YES  |     | NULL    |       |
| age     | int(5)      | YES  |     | NULL    |       |
| hobby   | varchar(10) | YES  |     | NULL    |       |
| shengao | int(10)     | YES  |     | NULL    |       |
| tizhong | int(5)      | YES  |     | NULL    |       |
+---------+-------------+------+-----+---------+-------+
6 rows in set (0.00 sec)

mysql> alter table t100 add sfz int(10) after name;
Query OK, 0 rows affected (0.01 sec)
Records: 0  Duplicates: 0  Warnings: 0
##
##使用一个after的参数
##
mysql> desc t100;
+---------+-------------+------+-----+---------+-------+
| Field   | Type        | Null | Key | Default | Extra |
+---------+-------------+------+-----+---------+-------+
| id      | int(5)      | YES  |     | NULL    |       |
| name    | varchar(10) | YES  |     | NULL    |       |
| sfz     | int(10)     | YES  |     | NULL    |       |
| age     | int(5)      | YES  |     | NULL    |       |
| hobby   | varchar(10) | YES  |     | NULL    |       |
| shengao | int(10)     | YES  |     | NULL    |       |
| tizhong | int(5)      | YES  |     | NULL    |       |
+---------+-------------+------+-----+---------+-------+
7 rows in set (0.00 sec)
##
##定义一个位置 如 first 第一个:
mysql> alter table t100 add ph int(10) first;
Query OK, 0 rows affected (0.13 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> desc t100;
+---------+-------------+------+-----+---------+-------+
| Field   | Type        | Null | Key | Default | Extra |
+---------+-------------+------+-----+---------+-------+
| ph      | int(10)     | YES  |     | NULL    |       |
| id      | int(5)      | YES  |     | NULL    |       |
| name    | varchar(10) | YES  |     | NULL    |       |
| sfz     | int(10)     | YES  |     | NULL    |       |
| age     | int(5)      | YES  |     | NULL    |       |
| hobby   | varchar(10) | YES  |     | NULL    |       |
| shengao | int(10)     | YES  |     | NULL    |       |
| tizhong | int(5)      | YES  |     | NULL    |       |
+---------+-------------+------+-----+---------+-------+
8 rows in set (0.00 sec)


2. 表结构更改
mysql> alter table t100 change id ID int(100);
Query OK, 0 rows affected (0.00 sec)
Records: 0  Duplicates: 0  Warnings: 0
##
##把字段id改成ID
##
mysql> desc t100;
+---------+-------------+------+-----+---------+-------+
| Field   | Type        | Null | Key | Default | Extra |
+---------+-------------+------+-----+---------+-------+
| ph      | int(10)     | YES  |     | NULL    |       |
| ID      | int(100)    | YES  |     | NULL    |       |
| name    | varchar(10) | YES  |     | NULL    |       |
| sfz     | int(10)     | YES  |     | NULL    |       |
| age     | int(5)      | YES  |     | NULL    |       |
| hobby   | varchar(10) | YES  |     | NULL    |       |
| shengao | int(10)     | YES  |     | NULL    |       |
| tizhong | int(5)      | YES  |     | NULL    |       |
+---------+-------------+------+-----+---------+-------+
8 rows in set (0.00 sec)

mysql> alter table t100 change ID id int(10) after age;
Query OK, 0 rows affected (0.01 sec)
Records: 0  Duplicates: 0  Warnings: 0
##
##把ID变成id 并且数据类型默认宽度改成10,并移动位置,放到age后面
##
mysql> desc t100;
+---------+-------------+------+-----+---------+-------+
| Field   | Type        | Null | Key | Default | Extra |
+---------+-------------+------+-----+---------+-------+
| ph      | int(10)     | YES  |     | NULL    |       |
| name    | varchar(10) | YES  |     | NULL    |       |
| sfz     | int(10)     | YES  |     | NULL    |       |
| age     | int(5)      | YES  |     | NULL    |       |
| id      | int(10)     | YES  |     | NULL    |       |
| hobby   | varchar(10) | YES  |     | NULL    |       |
| shengao | int(10)     | YES  |     | NULL    |       |
| tizhong | int(5)      | YES  |     | NULL    |       |
+---------+-------------+------+-----+---------+-------+
8 rows in set (0.01 sec)

##
##modify参数更改表结构也是跟change的效果是一样的,用哪个都可以
##
mysql> alter table t100 modify ph int(10) after AGE;
Query OK, 0 rows affected (0.01 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> desc t100;
+---------+-------------+------+-----+---------+-------+
| Field   | Type        | Null | Key | Default | Extra |
+---------+-------------+------+-----+---------+-------+
| NAME    | char(10)    | YES  |     | NULL    |       |
| sfz     | int(10)     | YES  |     | NULL    |       |
| id      | int(10)     | YES  |     | NULL    |       |
| hobby   | varchar(10) | YES  |     | NULL    |       |
| AGE     | int(100)    | YES  |     | NULL    |       |
| ph      | int(10)     | YES  |     | NULL    |       |
| shengao | int(10)     | YES  |     | NULL    |       |
| tizhong | int(5)      | YES  |     | NULL    |       |
+---------+-------------+------+-----+---------+-------+
8 rows in set (0.00 sec)


###如果不需要哪个字段,要删掉怎么做?
##直接用drop
##
mysql> alter table t100 drop NAME;
Query OK, 0 rows affected (0.01 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> desc t100;
+---------+-------------+------+-----+---------+-------+
| Field   | Type        | Null | Key | Default | Extra |
+---------+-------------+------+-----+---------+-------+
| sfz     | int(10)     | YES  |     | NULL    |       |
| id      | int(10)     | YES  |     | NULL    |       |
| hobby   | varchar(10) | YES  |     | NULL    |       |
| AGE     | int(100)    | YES  |     | NULL    |       |
| ph      | int(10)     | YES  |     | NULL    |       |
| shengao | int(10)     | YES  |     | NULL    |       |
| tizhong | int(5)      | YES  |     | NULL    |       |
+---------+-------------+------+-----+---------+-------+
7 rows in set (0.00 sec)

3. 更改数据
#
#先随便创建一个表
#
mysql> create table t3(id int, name varchar(20), sex enum('m','f') default 'm',age int);
Query OK, 0 rows affected (0.01 sec)

mysql> desc t3;
+-------+---------------+------+-----+---------+-------+
| Field | Type          | Null | Key | Default | Extra |
+-------+---------------+------+-----+---------+-------+
| id    | int(11)       | YES  |     | NULL    |       |
| name  | varchar(20)   | YES  |     | NULL    |       |
| sex   | enum('m','f') | YES  |     | m       |       |
| age   | int(11)       | YES  |     | NULL    |       |
+-------+---------------+------+-----+---------+-------+
4 rows in set (0.00 sec)

#
#插入一记录
#
mysql> insert into t3(id,name,sex,age) values(1,'zh','m',18);
Query OK, 1 row affected (0.00 sec)
#
#插入多条记录
#
mysql> insert into t3(id,name,sex,age) values(2,'vh','m',20),(3,'aa','f',19);
Query OK, 2 rows affected (0.00 sec)
Records: 2  Duplicates: 0  Warnings: 0
mysql> select * from t3;
+------+------+------+------+
| id   | name | sex  | age  |
+------+------+------+------+
|    1 | zh   | m    |   18 |
|    2 | vh   | m    |   20 |
|    3 | aa   | f    |   19 |
+------+------+------+------+
3 rows in set (0.00 sec)
#
#数据更新
#
mysql> update t3 set id=300 where name='aa';
Query OK, 1 row affected (0.09 sec)
Rows matched: 1  Changed: 1  Warnings: 0
#
##前面是要求改的字段,后面where后是要给谁改,标记一个位置。
#把aa这个人的id改成300
#
#
mysql> select * from t3;
+------+------+------+------+
| id   | name | sex  | age  |
+------+------+------+------+
|    1 | zh   | m    |   18 |
|    2 | vh   | m    |   20 |
|  300 | aa   | f    |   19 |
+------+------+------+------+
3 rows in set (0.00 sec)

#
#
#删除记录
#
mysql> delete from t3;
Query OK, 3 rows affected (0.00 sec)
##这个是直接删除了t3表里面所有的记录了。
mysql> select * from t3;
Empty set (0.00 sec)

如何查看数据库中有多少张表?

mysql> SELECT COUNT(*) TABLES, table_schema FROM information_schema.TABLES WHERE table_schema = 'zh' GROUP BY table_schema;

来来来,做题

在这里插入图片描述

4. 单表查询
请移步MySQL第四天的笔记。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值