------------------------------------------------
mysql启动不了使用:
1. 先把启动程序kill了 mysqld
2. 重启mysql服务
service mysql restart
-------------------------------------------------
用户相关操作
注:以下命令均需先以root身份登录mysql:mysql -uroot -p
1.添加新用户
(1)创建新用户:> insert into mysql.user(Host,User,Password) values("localhost","user1",password("password1"));
(2)为用户分配权限:
设置用户可以在本地访问mysql:grant all privileges on *.* to username@localhost identified by "password" ;
设置用户只能访问指定数据库:grant all privileges on 数据库名.* to username@localhost identified by "password" ;
(3)刷新系统权限表:>flush privileges;
2.查看MySql当前所有的用户:>SELECT DISTINCT User FROM mysql.user;
3.删除用户及其数据字典中包含的数据:>drop user 'xbb'@'localhost';
-----------------------------------------------------------
一.对数据库进行的操作
1. 查看数据库:
show databases;
最先开始三个不能删,自带的三个不能删
| information_schema | mysql | performance_schema |
2. 创建数据库:
create database 新建的数据库的名称;
## 普通数据库,不支持中文
create database 新建的数据库的名称 character set utf8;
## character 指定字符集,这样就创建了一个字符集为utf8的数据库
create database 新建的数据库的名称 character set utf8 collate utf8_general_ci;
## collate 对进入你新建的这个数据库的数据进行utf8格式的校对 从程序来的数据进入数据库要用得到
3. 修改数据库:
1>.修改数据库字符集:
alter database 数据库名称 character set utf8;
## 将对应的数据库字符集修改为utf8
4. 删除数据库:
drop database 要删除的数据库的名称;
5. 进入数据库:
use 数据库名称 ##不用加分号 因为这句是mysql自己的不是sql语句
二.对表进行操作(创建表先要进入数据库)
1. 查看表
show tables;
2. 创建表
create table 表名(字段参数);
## 字段参数即为表中的列 最少得有一个 例如(id int,name varchar(30))
create table if not exists 表名(字段参数);
## 创建一个不存在的表,如果已经存在,则无动作
3. 删除表
drop table 表名;
drop table if exists 表名; ##如果存在就删除,不存在就无动作
4. 对表的重命名
rename table 原表名 to 新表名;
5. 查看表的创建语句
show create table 表名;
6. 修改基本表 ## column是列的意思
alter table <表名> ## <表名>是要修改的基本表
[add[column] <新列名><数据类型>[完整性约束]] ## add子句用于增加新列、新的列级完整性约束条件
[add<表级完整性约束>] ## 和新的表级完整性约束条件。
[drop[column] <列名 [cascade|restrict]] ## drop column字句用于删除表中的列,如果指定了cascade短语,
[drop constraint<完整性约束名> [restrict|cascade]]## 则自动删除引用了该列的其他对象
[alter column <列名><数据类型>]; ## alter column 子句用于修改原有的列定义,包括修改列名和数据类型
三.对表的内容的操作:
1. 展示表
desc 表名; ## 将表内容展示出来
2. 修改字段的属性
alter table 表名 add 字段 字段类型; ## 增加了一个列
alter table 表名 字段 想要修改的类型; ## 将对应列的属性修改
alter table 表名 change 原字段名 新字段名 新字段类型;
3. 删除字段
alter table t1 drop 字段名;
四.对表的数据的操作:
增:>insert into 表名称 (字段名1,字段名2,字段名3......) values(字段名1的值,字段名2的值,字段名3的值......);
删:>delete from 表名称 where 表达式;
改:>update 表名称 set 字段名=“新值” where 表达式;
查:>select 字段名1,字段名2,字段名3..... from 表名称;
五.多表查询:
1. 交叉连接 (就是笛卡尔积)
1>. 官方标准写法:# 因为交叉连接的英文为"cross join"
select * from 表1 cross join 表2 cross join 表3 ......;
2>. 简单写法:
select * from 表1,表2,表3,.....;
# 两种写法得到结果相同
# 交叉连接如果数据有点大 得到的时间就会很长,每张表中数据也会很多,而且得到结果以后,可能也没有多大意思
# 应该避免这种查询
2. 内连接 (常用的多表查询方式)
1>. 官方标准写法: # 因为内连接的英文为"inner join"
select * from 表1 inner join 表2 on 限制条件;
2>. 简单写法
select * from 表1,表2 where 限制条件;
3>. 自连接
select * from 表名 别名1 inner join 表名 别名2 on 限制条件(用别名);
## 可以看做是比交叉连接多了限制条件 如果把限制条件去掉,将和交叉连接一样,
## 当然交叉连接如果加上限制条件也就变成内连接
## 限制条件中有等号的叫做等值连接,其他符号的叫做不等连接
## 在MySQL中 inner join 也可以直接写成 join 他们是等效的。
3. 外连接 (分为左外连接"left outer join" 和 右外连接"right outer join")
1>. 左外连接 "left outer join" 可以写成 "left join"
select * from 表1 left outer join 表2 on 限制条件;
2>. 又外连接 "right outer join" 也可以写成 "right join"
select * from 表1 right outer join 表2 on 限制条件;
## 外连接和内连接差不多,唯一不同的特性左外连接会把"left outer join"左侧的表中不符合条件的记录
## 也展示出来,由于左侧表中这部分记录并不符合连接条件 也就是说右侧表中没有与之对应的记录,所以它
## 会和”空记录“进行连接
## 换句话说,如果是左外连接,那么左侧表中所有的记录都会被显示出来,符合条件的记录会与右侧表中符合
## 条件的对应相连接,不符合条件的记录将会和"空记录"进行连接
## 同样 右外连接就是左外连接反过来,以右侧表为主而已
## 如果为主的表中所有记录都符合条件 那就不会出现与空记录进行连接的情况
4. 联合查询 union和union all
# 可以将其看成过个select语句放在一起使用
select * from 表1 union select * from 表2;
# 这样得出的结果是表1在上表2在下 以表1为基准,如果想以表2为基准,就把表2放union前面
# 当然也可以在*的位置使用别名
# 在使用union时候 两个语句查询出的字段数量必须相同,否则会报错
# 查询出结果以后 重复的会合并为一条 如果想全部显示出来,就用union all
5. 全连接 full join
# 在sql标准中,还有一种被成为"全连接"的多表查询方式,但是MySQL
# 不支持全连接,准确的说 MySQL不能直接使用"full join"实现全连接
# 但是我们可以变相的实现全连接 在 mysql中,我们可以使用"left join"
# "union" "right join" 的组合实现所谓的全连接
select * from 表1 left join 表2 on 限制条件 [where 另外的条件]
union
select * from 表1 right join 表2 on 限制条件 [where 另外的条件]; ## 这是一句 用union把 左外和右外连接起来 就变成了 全连接
来源:oschina
链接:https://my.oschina.net/u/4325586/blog/4103546