• 数据库操作语句DDL,DML,DCL


    DDL:数据定义语言;主要用于管理数据库组件,例如表,索引,视图,用户,存储过程;

      CREATE,ALTER,DROP

    DML:数据操纵语言,主要用管理表中的数据,实现数据的增删改查

      INSERT;DELETE;UPDATE;SELECT

    DCL:GRANT,REVOKE

    获取命令帮助:
      mysql>help keyword
    比如:mysql>help CREATE
      mysql>help CREATE DATABASE

    数据库的创建:
      CREATE {DATABASE | SCHEMA} [IF NOT EXISTS] db_name
      [DEFAULT] CHARACTER SET [=] charset_name
      | [DEFAULT] COLLATE [=] collation_name
    查看支持的所有字符集:show character set;
    查看支持的所有排序规则:SHOW COLLATION;
    数据库的创建也可以直接在数据的路径下之间创建个目录,不建议此举,因为创建的目录虽然可以当做数据库,不过无法设定字符集之类的操作
    步骤:
      mkdir /mydata/data/twodb
      cd /mydata/data
      chown -R mysql:mysql twodb

      mysql
      show databases
    删除数据库:
      DROP {DATABASE | SCHEMA} [IF EXISTS] db_name
    修改数据库:
      ALTER {DATABASE | SCHEMA} [db_name]
      [DEFAULT] CHARACTER SET [=] charset_name
      [DEFAULT] COLLATE [=] collation_name

    表的管理:
      创建:(help create table)
      CREATE TABLE [IF NOT EXISTS] tbl_name (create_defination) [table_options]
        create_defination:一般以逗号隔开
      字段:col_name字段名,data_type数据类型
      键:
        primary key(col1,col2..)把哪些字段定义为主键
        unique key(col1,col2...)把哪些字段定义为唯一键
        foreign key(column):定义外键
      索引:
        KEY|INDEX [index_name] (col1,col2...)
      表创建示例:
        create table students(id int unsigned not null , name char(30) not null, age tinyint unsigned, gender enum('f','m'),primary key(id,name));
        create table students(id int unsigned not null primary key, name char(30) not null, age tinyint unsigned, gender enum('f','m'));
        create table grade_talbe(id int null,grade int not null, subject char(30),FOREIGN KEY(id) REFERENCES student_info(id) on delete cascade on update cascade); 创建外键,其中tudent_info(id)为外表对应的字段id
          int unsigned:指无符号整型,即没有负数,两者位置得放在一起
    进入数据库:use onedb;
    查看表:desc students;
    删除表drop table students;
    table_options:
      ENGINE[=]engine_name

    查看数据库支持的所有存储引擎类型:
      mysql>show engines;
    查看某表的存储引擎类型:
      mysql>show tables status [like "tbl_name"]

    修改表:(help alter table)
      ALTER [ONLINE | OFFLINE] [IGNORE] TABLE tbl_name [alter_specification [, alter_specification] ...]
      alter_specification:
      字段:
        添加:ADD [COLUMN] col_name data_type [FIRST | AFTER col_name ]
          比如:alter table students add class varchar(100) not null;
             alter table students add class varchar(100) not null after name;这个指放到字段name的后面
        删除:
          比如:alter table students drop class;
        修改:
          CHANGE [COLUMN] old_col_name new_col_name column_definition [FIRST|AFTER col_name]修改字段名
          MODIFY [COLUMN] col_name column_definition [FIRST | AFTER col_name]修改数据类型
          比如:alter table students modify class varchar(200) after age;
      键:

        添加:ADD {primary|unique|foreign} key (col1,col2...)
        删除:
          主键:DROP PRIMARY KEY
          外键:DROP FOREIGN KEY fk_symbol
          例如:alter table students drop primary key;
            alter table students add unique key (name);
     索引:
        添加:ADD {INDEX|KEY} [index_name] (col1,col2..)
        删除:DROP {INDEX|KEY} [index_name]
          例如:alter table students drop index name;
            alter table students add index class(class); 第一个class表示索引的名字,括号里面的是字段
      查看索引名字:
        show indexes from students;
    删除表:
      drop table [if exists] tbl_name [,tbl_name2]...

    索引管理:

      创建:CREATE [ONLINE|OFFLINE] [UNIQUE|FULLTEXT|SPATIAL] INDEX index_name [BTREE|HASH] ON tbl_name (col1,col2...)
        比如:create index name_and_class on students (name,class);
      删除:drop index index_name on tbl_name
        比如:drop index name_and_class on students;

    DDL:insert;delete;update;select
    insert into:
    insert [into] tbl_name [(col1..)]{values|value} (val1..),(val2..)
      比如:insert into students values (1,'huang er lin','c15f36',23,'m','c15f3629');
         insert into students (id,name) values (2,'huang er cun'),(3,'huang jia jin');允许空值的字段可以不用输入,这语句时在id,name字段输入值
         注意:字符型要用引号;数值型不能用引号;

    select:
      (1)select * from tbl_name:查看表的所有数据
      (2)select col1,col2,... from tbl_name:查看表的指定字段
      显示时,字段可以用别名显示:select col_name as col_alias from tbl_name
        示例:select id,name from students;
           select id as ID,name from students;
      (3)select col1,... from tbl_name where clause;
        where clause:用来指明挑选条件
          挑选条件的操作符:>,<,==,<=,>=,!=
          组合条件:and;or;not
          操作符2:betweend..and..
          like 'pattern'
          通配符:
            %:任意长度的任意字符
            _:任意单个字符
            like 'pattern'支持正则表达式
            is null:为空
            is not null:为非空

      比如: select * from students where id=1;
         select * from students where age >=20 and age<= 80;这句也等于:select * from students where age between 30 and 80;
         select * from students where name=="huang er lin";
         select name from students where name like "%cun%";
         select * from students where age is null;挑选年龄为空的字段
         select * from students where age is not null;挑选字符非空的字段
      (4)select col1.. from tbl_name [where clause] order by col_name1,col_name2... [asc|desc];
        asc:升序
        desc:降序
        比如:select id,name from students order by name;

    delete:
      DELETE FROM tbl_name [WHERE where_condition] [ORDER BY ...] [LIMIT row_count
      DELETE FROM tbl_name [WHERE where_condition]
      DELETE FROM tbl_name [ORDER BY ...] [LIMIT row_count]
        比如:delete from students where age is null;
           delete from students order by age desc limit 20 这表示删除年龄最高的20位
          注意注意:如果没有指定挑选条件的话,即where,那就是删除整个表的数据,这非常危险

    update:
    UPDATE [LOW_PRIORITY] [IGNORE] table_reference SET col_name1={expr1|DEFAULT} [, col_name2={expr2|DEFAULT}] ...[WHERE where_condition] [ORDER BY ...] [LIMIT row_count]
      比如:update students set age=age-15 where name not like 'stu%';

      一次性创建50条数据并插入students表中并且返回命令:]#:for i in {1..50}; do AGE=$[$RANDOM%100]; mysql -e "insert into onedb.students (id,name,age) values ($i,"stu$i",$AGE);"; done

    用户账号权限管理:
    用户账号:
    'username'@'host'
    host:此用户访问当前mysql服务器时,允许其通过哪些主机远程创建连接;
    表示方式:ip,网络地址,主机名,通配符(%和_)

    创建用户账号:
      create user 'username'@'host' [identified by 'passwd'];
      flush privileges;刷新权限
    删除用户账号:
      drop user 'user'@'host'[,user@host]...
    授权:
    授权级别:管理权限,数据库,表,字段,存储例程
      grant priv_type...on [object_type] db_name.tbl_name to 'user'@'host' [identified by 'passwd'];
        priv_type:ALL=[privileges]
        也可以是DDL,DML的语句
        db_name.tbl_name:指定库的特定表
        *.*:所有库的所有表;
        db_name.*:指定库的所有表
        db_name.routine_name:指定库上的存储过程或存储函数;
        [object_type]:
          table
          function
          procedure
        例如:grant select on onedb.students to 'hel666'@'192.168.%.%' identified by '159357';
    查看用户拥有那些权限:show grants for 'hel666'@'192.168.%.%';
    查看当前用户拥有哪些权限:show grants for current_user;
    回收权限:
      revoke priv_type..on db_name.tbl_name from 'user'@'host'
    注意:MariaDB服务进程启动时,会读取mysq库的所有授权表至内存中;
      (1)GRANT或REVOKE命令等执行的权限操作会保存至表中,MariaDB此时一般会自动重读授权表,权限修改会立即生效
      (2)其他方式实现的权限修改,要向立即生效,必须手动使用flush privileges命令;

  • 相关阅读:
    JAVA获取指定天数之后的日期
    JAVA携带参数(带有参数)直接发送POST请求
    JAVA使用itext根据模板生成PDF文档
    office2007(word2007)另存为pdf文档
    JAVA判断某个元素是否在某个数组中
    SpringBoot单元测试demo
    tomcat启动报错There is insufficient memory for the Java Runtime Environment to continue
    JAVA中价格金额的存储类型
    JAVA获取当前日期的下周一到下周日的所有日期集合
    Golang package和目录的区别
  • 原文地址:https://www.cnblogs.com/hel7512/p/12753291.html
Copyright © 2020-2023  润新知