用户操作 数据库操作 表操作 表数据操作 修改表结构 复制表 导入导出数据库 查询表 where(条件查询) having(筛选) group by(分组) order by(排序) limit(限制结果数) 执行顺序 多表查询
## 连接数据库
1 mysql -h 主机地址 -u 用户名 -p 用户密码 (注:u与root可以不用加空格,其它也一样)
用户操作 创建用户
1 CREATE USER 'username'@'host' IDENTIFIED BY 'password';
授权:
1 GRANT privileges ON databasename.tablename TO 'username'@'host'
privileges - 用户的操作权限,如SELECT,INSERT,UPDATE等.如果要授予所的权限则使用ALL;如果要授予该用户对所有数据库和表的相应操作权限则可用表示, 如 .*.
用以上命令授权的用户不能给其它用户授权,如果想让该用户可以授权,用以下命令:
1 GRANT privileges ON databasename.tablename TO 'username'@'host' WITH GRANT OPTION;
设置与更改用户密码
1 SET PASSWORD FOR 'username'@'host' = PASSWORD('newpassword');
撤销用户权限
1 REVOKE privilege ON databasename.tablename FROM 'username'@'host';
删除用户
1 DROP USER 'username'@'host';
数据库操作
显示数据库:SHOW databases;
创建库:CREATE DATABASE 库名;
删除库:DROP DATABASE 库名;
使用库(选中库):USE 库名;
表操作
显示数据表:SHOW tables
显示表结构:DESC 表名
删除表:DROP TABLE 表名;
输入创建表的DDL语句 SHOW CREATE TABLE 表名;
创建表:1 2 3 4 5 6 7 8 9 10 11 12 13 CREATE TABLE USER ( name VARCHAR (30 ) NOT NULL , id INT DEFAULT '0' NOT NULL , stu_id INT , phone VARCHAR (20 ), address VARCHAR (30 ) NOT NULL , age INT (4 ) NOT NULL , PRIMARY KEY (name), CONSTRAINT stu_id UNIQUE (stu_id) ) ENGINE= InnoDB DEFAULT CHARSET= utf8;
表数据操作
清空表数据truncate table 表名;. truncate删除后不记录mysql日志,不可以恢复数据。相当于保留mysql表的结构,重新创建了这个表,所有的状态都相当于新表。
清空表数据delete from 表名. delete的效果有点像将mysql表中所有记录一条一条删除到删完
修改表结构
修改列名alter table 表名称 change 字段名称 字段名称
修改表名alter table 表名称 rename 表名称
修改某个表的字段类型及指定为空或非空alter table 表名称 change 字段名称字段名称 字段类型 [null/not null];
修改某个表的字段名称及指定为空或非空alter table 表名称 change 字段原名称字段新名称 字段类型 [null/not null];
增加一个字段(一列)alter table table_name add column column_name type default value; type指该字段的类型,value指该字段的默认值
更改一个字段名字(也可以改变类型和默认值)alter table table_name change sorce_col_name dest_col_name type defaultvalue; source_col_name指原来的字段名称,dest_col_name指改后的字段名称
改变一个字段的默认值alter table table_name alter column_name set default value;
改变一个字段的数据类型alter table table_name change column column_name column_name type;
向一个表中增加一个列做为主键alter table table_name add column column_name type auto_increment PRIMARYKEY;
向一个表中增加一个列做为主键alter table table_name add column column_name type auto_increment PRIMARYKEY;
删除字段alter table form1 drop column 列名;
复制表
含有主键等信息的完整表结构 CREATE table 新表名 LIKE book;
只有表结构,没有主键等信息 `create table 新表名 select * from books;
将旧表中的数据灌入新表 INSERT INTO 新表 SELECT * FROM 旧表; 注:新表必须已经存在
导入导出数据库
数据库某表的备份,在命令行中输入:mysqldump -u root -p database_name table_name > bak_file_name
导出数据select_statment into outfile”dest_file”;
导入数据load data infile”file_name” into table table_name;
将两个表里的数据拼接后插入到另一个表里insert into tx select t1.com1,concat(t1.com2,t2.com1) from t1,t2;
查询表 mysql查询的五种子句
where(条件查询) 1 SELECT * FROM t1 WHERE id > 100 ;
数值谓词:>,=,<,<>,!=,!>,!<,=>,=<
字符串谓词:=,like
日期谓词:= (SELECT * from t1 WHERE create_time = '2011-04-08')
having(筛选)
group by(分组) 1 SELECT id FROM player GROUP BY vip;
order by(排序) 1 SELECT id FROM player ORDER BY id;
limit(限制结果数) 查询前n条记录(默认从第0个开始)
1 SELECT id FROM player LIMIT 10 ;
从结果集中第1个开始查询, 查询10个
1 SELECT id FROM player LIMIT 1 , 10 ;
执行顺序 sql语句的执行顺序
1 2 3 4 5 6 7 8 9 10 (7 ) SELECT (8 ) DISTINCT < select_list> (1 ) FROM < left_table> (3 ) < join_type> JOIN < right_table> (2 ) ON < join_condition> (4 ) WHERE < where_condition> (5 ) GROUP BY < group_by_list> (6 ) HAVING < having_condition> (9 ) ORDER BY < order_by_condition> (10 ) LIMIT < limit_number>
也就是
1 FROM->ON->JOIN->WHERE->GROUP BY->HAVING->SELECT->DISTINCT->ORDER BY->LIMIT
多表查询
SELECT * FROM a, b WHERE a.id=b.id;
SELECT * FROM a INNER JOIN b ON a.id=b.id;
SELECT * FROM a FULL JOIN b ON a.id=b.id;
SELECT * FROM a LEFT JOIN b ON a.id=b.id;
SELECT * FROM a RIGHT JOIN b ON a.id=b.id;
SELECT * FROM a CROSS JOIN b ON a.id=b.id;
SELECT * FROM a INNER JOIN b USING(id);
SELECT * FROM a FULL JOIN b USING(id);
SELECT * FROM a LEFT JOIN b USING(id);
SELECT * FROM a RIGHT JOIN b USING(id);
SELECT * FROM a CROSS JOIN b USING(id);