设为首页 收藏本站
查看: 1235|回复: 0

[经验分享] MySQL系列:SQL语句详解

[复制链接]

尚未签到

发表于 2018-10-22 06:45:36 | 显示全部楼层 |阅读模式
  一、数据库管理
  1.创建数据库:create  Database database_name;
  CREATE  {DATABASE | SCHEMA}  [IF NOT EXISTS]  db_name;
  [DEFAULT]  CHARACTER SET [=] charset_name
  [DEFAULT]  COLLATE [=] collation_name
  查看支持的所有字符集:SHOWCHARACTER SET
  查看支持的所有排序规则:SHOW  COLLATION
  注意:database_name命名规范
  1)首字母不能是数字、$、空格、特殊字符、保留字
  2)最大128字节
  3)由字母、数字、下划线、@和$组成
  2.查看数据库
          SHOW databases
  3.选择数据库
          USE database_name
  4.删除数据库:DROP  DATABASE database_name
  DROP{DATABASE | SCHEMA} [IF EXISTS] db_name
  5.修改数据库
  ALTER{DATABASE | SCHEMA}  [db_name]
  [DEFAULT]  CHARACTER SET [=] charset_name
  [DEFAULT]  COLLATE [=] collation_name
  二、表管理
  1.创建表
  create  table table_name (属性名 数据类型…)
  2.查看表结构
  (1)表定义信息
DESCRIBE    table_name
DESC    table_name
  (2)表详细定义
              SHOW CREATETABLE table_name
  3.删除表
             DROP TABLE table_name
  4.修改表(ALTER TABLE)
  (1)修改表名
  ALTER TABLE  老表名  rename 新表名
  (2)增加字段
  最后:ALTHETABLE  表名  ADD  属性名 属性类型
  第一位置:ALTHE TABLE表名 ADD  属性名 属性类型  FIRST
  指定字段后:ALTHETABLE  表名ADD  属性名 属性类型   AFTER 属性名
  (3)删除字段

  >  (4)修改字段
  修改数据类型:ALTER TABLE  表名  MODIFY  属性名 属性类型
  修改字段名:ALTER  TABLE  表名  CHANGE  旧属性名 新属性名 旧类型
  同时修改:ALTER  TABLE  表名  CHANGE 旧属性名 新属性名 新类型
  修改字段顺序:ALTER  TABLE   表名  MODIFY 属性名1 数据类型 FIRSE|AFTER 属性名2

  三、数据管理
  1.插入数据
     (1)INSERT INTO  table_name (field1….field n)VALUES(value1…value n)
  (2) INSERT INTO  table_name (field1….field n)  VALUES(value1…value n)…(value11…value mn)
  (3)插入查询结果
INSERT INTO  table_name1(field11….field 1n)  SELECT  (field21….field 2n)  FROM table_name2  WHERE…
  2.更新数据
         UPDATE table_name SETfield1=value1…fieldn=value n WHERE CONDITION
  3.删除记录
        DELETE FROM  table_name  WHERE CONDITION
  四、表的约束
  1.设置非空约束(NOT NULL,NK)
  CREATE TABLE  table_name (属性名 类型 NOT NULL );
  2.设置字段默认值(DEFAULT)
  CREATE TABLE  table_name (属性名 类型 DEFAULT 默认值);
  3.设置唯一约束(UNIQUE,UK)
  CREATE TABLE  table_name (属性名 类型 UNIQUE L );
  4.设置主键约束(PRIMARY KEY,PK)
  单字段主键:CREATE  TABLE  table_name (属性名 类型 PRIMARY KEY );
  多字段主键:
  CREATE  TABLE  table_name (属性名 类型 ,…【CONSTRAINT 约束名】 PRIMARY KEY(属性名,属性名…) );
  5.设置字段值自动增加(AUTO_INCREMENT)
  CREATE TABLE table_name (属性名 类型 AUTO_INCREMENT,… );
  6.设置外键约束(FOREIGNKEY,FK)
  CREATE  TABLE table_name (属性名 类型; 属性名 类型;… CONSTRAINT 外键约束名 FOREIGN (属性名1)REFERENCES 表名(属性名2));
  五、索引管理
  1.创建普通索引
    (1) CREATE TABLE table_name (
  属性名 数据类型,属性名 数据类型,……属性名 数据类型,
  INDEX | KEY 【索引名】(属性名1【(长度)】【ASC|DESC】));
  注意:
  1) INDEX 或KEY参数用来指定字段为索引
  2) 不同存储引擎定义了表的最大索引数和最大索引长度
  3) Mysql所支持的存储引擎对每个表至少支持16个索引,总索引长度至少256
  (2) CREATE INDEX  索引名 ON 表名(属性名1【(长度)】【ASC|DESC】));
  (3)ALTER TABLE  table_name ADD INDEX | KEY 索引名(属性名1【(长度)】【ASC|DESC】)
  2.创建唯一索引
    (1) CREATE TABLE table_name (
  属性名 数据类型,属性名 数据类型,……属性名 数据类型,
  UNIQUE INDEX | KEY【索引名】(属性名1【(长度)】【ASC|DESC】));
  (2) CREATE UNIQUEINDEX  索引名 ON表名(属性名1【(长度)】【ASC|DESC】));

  (3)>  3.创建全文索引
    (1) CREATE TABLE table_name (
  属性名 数据类型,属性名 数据类型,……属性名 数据类型,
  FULLTEXT INDEX |KEY 【索引名】(属性名1【(长度)】【ASC|DESC】));
  (2) CREATE FULLTEXTINDEX  索引名 ON表名(属性名1【(长度)】【ASC|DESC】));

  (3)>  4.创建多列查询
    (1) CREATE TABLE table_name (
  属性名 数据类型,属性名 数据类型,……属性名 数据类型,
  INDEX |KEY 【索引名】(属性名1【(长度)】【ASC|DESC】)
                      …….
  属性名n【(长度)】【ASC|DESC】));
  (2) CREATE INDEX  索引名
  ON 表名(属性名1【(长度)】【ASC|DESC】)
          …….
  属性名n【(长度)】【ASC|DESC】));
    (3)ALTER TABLE  table_name
  ADD INDEX | KEY 索引名(属性名1【(长度)】【ASC|DESC】)
                       …….
  属性名n【(长度)】【ASC|DESC】));
  5.查询索引
EXPLAIN
  6.删除索引
         DROP INDEX  index_name ON table_name
  六、视图管理
  1.创建视图
  CREATE VIEWview_name AS 查询语句
  2.查看视图
  (1)名称:USE 库; SHOW TABLES;不仅会显示表名,还会显示视图名
  (2)详细信息:SHOW TABLE  STATUS 【FROM 库】【LIKE ‘关键字’】
  (3)设计信息:DESCRIBE|DESC view_name
  (4)系统数据库:information_schema中视图信息的表格views
  3.删除视图
  DROP VIEWview_name1, view_name1……
  4.修改视图
  (1)替换的创建:create ORREPLACE view view_name AS 查询语句
  (2)修改语句:ALTER VIEW view_name AS 查询语句
  七、触发器
  1.创建有一条语句的触发器
       Create TRIGGER  trigger_name   BEFORE|AFTER trigger_EVENT  ON  table_name FOR EACH ROW  trigger_STMT
  trigger_EVENT:触发事件,即触发执行的条件(DELETE、INSERT、UPDATE)
  FOR EACH ROW:任何一条记录上的操作满足触发事件都会触发该触发器
  trigger_STMT:激活触发器后执行语句
  2.创建包含多条执行语句的触发器
        Create trigger  trigger_name
           BEFORE|AFTER  trigger_EVENT
              ON  table_name FOR EACH ROW
BEGIN
trigger_STMT
END
  3.查看触发器
        SHOW TRIGGERS;
  4.删除
       DROP TRIGGER   trigger_name;
  八、存储过程
       CREATE PROCEDURE procedure_name([procedure_parameter[,…]])[characteristic…]  routine_body
  注释:
  1) procedure_parameter:存储过程的参数
                [IN|OUT|INOUT] procedure_nametype
  2) characteristic:存储过程的特性
  3) routine_body:SQL语句主体,可用BEGIN…END开始和结束
  九、用户相关
  1.命令行连接mysql
      mysql –hHOST  –uUSERNAME –pPASSWD   –e “SQL”
  -h:指明所需要连接的主机名称或者地址
  -u:指明需要登录的用户名
  -p:指明登录该数据库用户的密码
  -e:不进入mysql交互界面指明SQL语句
  注意:
  1) mysql后接参数可以直接加上数值,无需空格
  `         2) 直接加在-p 参数之后是明文密码,可以不填,在回车后填写不显示格式密码
  3) -e参数非登录必须参数
  4) 若匿名用户在本机登录该数据库,可以直接输入mysql后回车即可
  2.创建普通用户账户,赋予权限
  (1) 命令创建用户
            mysql> CREATE USER username[IDENTIFIED BY [PASSWORD] ‘password’]…
mysql>  FLUSH PRIVILEGES;
  关键字PASSWORD实现对密码加密
  (2) 在mysql指定的表中插入用户信息数据
  mysql>  INSERT INTO user(host,user,password)VALUES(‘hostname’,’user’, PASSWORD (‘password’));
mysql>  FLUSH  PRIVILEGES;
  注意:
  1) 由于该语句是向mysql_user插入用户账号数据,ssl_cipher、x509_issuer、x509_subject无默认值要设置这些字段
  2) 对于Password字段的值一定要用PASSWORD()函数加密
  3) 刷新授权信息后所创建用户才能生效
  (3)GRANT创建账户可以对账户赋权限
             mysql> GRANT priv_type ONdatabasename.tablename TO username@"host" [IDENTIFIED BY [PASSWORD]‘password’]…
  mysql> FLUSH  PRIVILEGES;
  参数说明:
  priv_type:表示权限信息,如select、all privileges… ...
  权限级别:管理权限、数据库、表、字段、存储例程;
  databasename.tablename:表示该用户只能对该表的权限
  *.*:所有库的所有表;
  db_name.*:指定库的所有表;
  db_name.tbl_name:指定库的特定表;
  db_name.routine_name:指定库上的存储过程或存储函数;
  username:所需创建的用户,或者在对已存在的用户进行授权时存在的用户的用户名
  host:允许其通过哪些主机远程创建连接;表示方式:IP,网络地址、主机名、通配符(%和_);例如"172.16.%.%"

  3.用户权限相关
  (1)查看指定用户所获得的授权:
  mysql>  SHOW GRANTS FOR  'user'@'host'
  (2)回收权限
  mysql>  REVOKE  priv_type, ...  ON db_name.tbl_name  FROM  'user'@'host';
  注意:
  MariaDB服务进程启动时,会读取mysql库的所有授权表至内存中;
  1)GRANT或REVOKE等执行的权限操作会保存于表中,MariaDB此时一般会自动重读授权表,权限修改会立即生效;
  2)其它方式实现的权限修改,要想生效,必须手动运行FLUSH PRIVILEGES命令方可;

  4.修改root密码
  (1) mysqladmin命令修改
             mysqladmin –u username –p password“new_password”
  (2)Root用户对密码修改
  mysql> SETPASSWORD=PASSWORD(“new_password”)
  (3)更新mysql.user表数据
    mysql>  UPDATE user SET password=PASSWORD(“new_password”) WHERE user=”root” AND host=”hostname”;

  5.利用超级用户更改普通用户密码
        (1) GRANT priv_type ONdatabasename.tablename  TO username[IDENTIFIED BY [PASSWORD] ‘new_password’]
        (2) SET PASSWORD FOR‘username’@’hostname’=PASSWORD(“new_password”)
        (3)UPDATE user SET password=PASSWORD(“new_password”) WHERE user=”” AND host=”hostname”;
  (4)进入普通用户,再SET PASSWORD=PASSWORD(“new_password”)

  6.数据库备份
        mysql>    Mysqldump -u username –p  dbname  [table1…table n]  > backupname.sql
        mysql>    Mysqldump -u username –p  dbname1…dbname n>  backupname.sql
        mysql>    Mysqldump -u username –p  --all –databases>  backupname.sql

  7.安全加固
  在安装完成后,运行mysql_secure_installation命令;会设置root用户密码,删除测试数据库,删除匿名用户等,以提高数据库的安全性
  8.图形管理组件
  phpMyAdmin(运行于lamp架构)、Navicat、Mysql-Front、ToadForMySQL、SQLyog


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-624654-1-1.html 上篇帖子: SQL Server 表变量和临时表的简述 下篇帖子: SQL导论
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表