MySQL基础语句

懵懂的女人 提交于 2021-02-08 23:03:25

------------------------------------------------
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把 左外和右外连接起来 就变成了 全连接

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!