重排
auto_increment
值
MYSQL
数据库自动增长的
ID
如何恢复
清空表的时候。不能用
delete from tablename;
而是要用:
truncate table tablename;
这样
auto_increment
就恢复成
1
了
或者清空内容后直接用
ALTER
命令修改表
:
altertable tablename auto_increment =1;
altertable tablename auto_increment =1;
一、mysql
表复制 :
以复制
t1
表为例
create table t2 like t1;
#
创建
t2
表,并学习
t1
的表结构
insert into t2 select * from t1;
#
复制
t1
表的数据
二、修改表
1
、修改表类型
ALTER TABLE tablename MODIFY [COLUMN] column_definition [FIRST | AFTER col_name]
如:修改表
emp
的
ename
字段,将
varchar(10)
改为
varchar(20)
alter table emp modify ename varchar(20);
2
、增加表字段
ALTER TABLE tablename ADD [DOLUMN] column_definition [FIRST | AFTER col_name]
如:表
emp
上新增字段
age
,类型为
int(3);
alter table emp add column age int(3);
3
、删除表字段
ALTER TABLE tablename DROP [COLUMN] col_name
将字段
age
删除掉
alter table emp drop column age;
4
、字段改名
ALTER TABLE tablename CHANGE [COLUMN] old_col_name column_definition [FIRST | AFTER col_name]
如:将
age
改名为
age1
,同时修改字段类型为
int(4)
alter table emp change age age1 int(4);
注意:
CHANGE
和
MODIFY
都可以修改表的定义,不同的是
change
后面需要写两次列名,不方便。但是
change
的优点是可以修改列名称,
modify
则不能。
5
、修改字段排列顺序
如:将新增的字段
birth date
加在
ename
之后。
alter table emp add birth date after ename;
例
2
:修改字段
age
,将它放在最前面
alter table emp modify age int(3) first;
注意:
CHANGE/FRIST|AFTER COLUMN
这些关键字都属于
MySQL
在标准
SQL
上的扩咱,在其他数据不一定适用。
6
、更改表名
ALTER TABLE tablename RENAME [TO] new_tablename
例:将表
emp
改名为
emp1
alter table emp rename emp1
三、删除记录
DELETE FROM tablename [WHERE CONDITION]
一次删除多个表的数据
DELETE t1,t2...tn FROM t1,t2...tn [WHERE CONDITION]
如:将表
emp
和
dept
中
deptno
为
3
的记录同时删除
delete a,b from emp a,dept b where a.deptno=b.deptno and a.deptno = 3
例子:
DELETE FROM demo WHERE H != '乌鲁木齐市'
删除demo表中 H 字段不等于‘乌鲁木齐市’的信息,注意此时demo表中的H字段还留有为空的数据
DELETE FROM demo WHERE H != '乌鲁木齐市' OR H IS NULL
四、连接查询
表连接:分为内连接和外连接
它们之间的区别:内连接仅选出两张表中互相匹配的记录,而外连接会选出其他不匹配的记录
其中外连接又分为左连接和右连接
左连接:包含所有的左边表的记录甚至是右边表中没有和它匹配的记录。
右连接:包含所有的右边表的记录甚至是左边表中没有和它匹配的记录。
现在有两张表内容如下,分别以内连接和外连接查询结果如图
SELECT * FROM emp;
SELECT * FROM dept;
内连接:
SELECT ename,deptname FROM emp,dept WHERE emp.deptno = dept.deptno
以左连接为例:
SELECT ename,deptname FROM emp LEFT JOIN dept ON emp.deptno=dept.deptno
五、权限管理
创建一个数据库用户
z1
,具有对
sakila
数据库中所有表的
SELECT/INSERT
权限
grant select,insert on sakila.* to ‘z1’@’localhost’ identified by ‘123’;
grant all on *.* to root@'%' identified by '123456';
grant select,insert,update,delete on *.* to user1@localhost Identified by "123456";
收回
z1
用户的
insert
权限
revoke insert on sakila.* from ‘z1’@’localhost’;
六、修改root密码
设置root密码
# mysqladmin -u root password "newpass"
如果root已经设置过密码,采用如下方法
# mysqladmin -u root password oldpass "newpass"
七、mysql支持远程连接
1、赋予任何主机访问数据库权限
root@ubuntu:~# mysql -uroot -p123456
mysql>grant all privileges on *.* to 'root'@'%' identified by 'password' with grant option;
mysql>flush privileges;
2、修改/etc/mysql/my.cnf
注释掉bind-addresss = 127.0.0.1
重启mysql
service mysql restart
八、查看当前的默认存储引擎
Show variables like ‘talbe_type’;
查看当前数据库支持的存储引擎
Show engines;
Show variables like ‘have%’;
其中Value显示为“DISABLED”的记录表示支持该存储引擎,但是数据库启动的时候被禁用。
查看数据表状态(包括表引擎等信息)
SHOW TABLE STATUS FROM 数据库名 WHERE NAME='数据表名';
或: mysqlshow -u 用户名 -p --status 数据库名 数据表名
show table status;
show table status like 'ct_wifi_VirtualAP%' \G; //查看ct_wifi_VirtualAP前缀的表的状态