MySQL常用指令整理

-- 数据库操作
-- 创建数据库
create database itcast;
    -- 创建数据库并指定字符集
    create database itcast character set utf8;
-- 查看数据库
show 库名;
show databases;
    
-- 删除数据库
drop database itcase;

-- 创建表
create table 表名(字段名1 数据类型[(长度)] [约束条件],字段名2 数据类型[(长度)] [约束条件]);
create table t4 (c1 int,c2 varchar(20),c3 text,c4 int,c5 int);
-- 查看表的字段属性
desc 表名;
--修改表名
alter table 旧表名 rename 新表明;
alter table xi_ID rename xi;
-- 修改表的字符集
alter table 表名 character set 字符集;
alter table users character set utf8;

-- 添加字段
alter table 表名 add 字段名 数据类型[(长度)] 约束条件;
alter table student add lalala varchar(20);
-- 修改字段数据类型
alter table 表名 modify 字段名 数据类型[(长度)] [约束条件];
alter table t4 modify c3 int not null;
--修改字段名
alter table 表名 change 旧字段 新字段 数据类型[(长度)];
alter table student change gender name varchar(20);
-- 删除字段
alter table 表名 drop 字段名;
alter table student drop id;



-- 索引

-- 创建普通索引
create table test06 (id int primary key,name varchar(15) not null,age int(10),aa int unique,bb text,index(id));
-- 创建带名字的普通索引
create table test07 (id int primary key,name varchar(15) not null,age int(10),aa int unique,bb text,index indexName (id));
-- 查看表中某个字段的索引是否被使用
explain select * from t2 where id=1;
-- 创建唯一性索引
create table test09 (id int,name varchar(15) not null,age int(10),aa int unique,bb text,unique index unique_id (id asc));
-- 创建全文索引
create table test10 (id int,name varchar(15) not null,age int(10),aa int unique,bb text,fulltext index fulltext_name (name));
-- 创建单列索引
create table t1 (id int,name varchar(20) not null,age int(10),aa int unique,bb text,index single_name(name(20)));
-- 创建多列索引
create table t2 (id int,name varchar(20) not null,age int(10),aa int unique,bb text,index multi(name(20),id));
-- 创建空间索引
create table t3 (id INT,name varchar(20) not null,age int(10),space geometry not null,SPATIAL index sp(space))engine=myisam;
-- 给已有的表创建-普通索引
create index index_c1 on t4(c1);
alter table t4 add index hh(c1);
-- 给已有的表创建-唯一性索引
create unique index unique_index_c2 on t4(c2);
alter table t4 add unique index hh2(c2);
-- 给已有的表创建-单列索引
create index usignal_index_c3 on t4(c3(10));
alter table t4 add index signal_hh2(c2);
-- 给已有的表创建-多列索引
create index mulitidx_index_c4andc5 on t4(c4(4),c5(4));
alter table t4 add index mulit_hh2(c2,c3(10));
-- 给已有的表创建-全文索引
create fulltext index fulltext_index_c2 on t4(c2);
alter table t4 add fulltext index fulltext_hh2(c2);
-- 给已有的表创建-空间索引
create spatial index spatial_index on t5(space);
alter table t4 add spatial index spatial_hh2(space);
-- 删除索引
alter table t4 drop index fulltext_hh2;
drop index mulit_hh2 on t4;

--第三章
--添加数据
insert into t4 (c1,c2,c3,c4,c5) values (11,"awei",22,33,44);
insert into t4 values (22,"haokun",33,44,55);
insert into t4 (c4,c5) values (33,44);
insert into t6 values (22,"haokun",22),(33,"awei",33),(44,"hk",44);
insert into t6 (id,name) values (222,"test1"),(333,"wei");
--更新数据
update student set name='刘伟',grade=100.00 where name="awei";
update student set grade=66 where grade<40;
update student set grade=66;
--删除数据
delete from student where name='刘伟';
delete from student;
--只能用于清表的命令,自增字段从1开始计数
--属于DDL,工作原理是drop表然后create表,而不是删数据,直接删表
truncate table student;

--第四章
--简单查询
select id,grade,name from student;
--在表中查询grade字段并去重,然后按照升序排序
select distinct grade from student order by grade;
select * from student;
--按条件查询
select * from student where id<5;
select * from liuwei.test where name in('张三','李四','王五','赵六');
select * from liuwei.test where name not in('张三','李四','王五','赵六');
select * from liuwei.test where id between 10 and 20;
select * from liuwei.test where id not between 10 and 20;
--查询空值
select * from liuwei.test where name is null;
select * from liuwei.test where name is not null;
--查询并去重显示
select distinct gender from liuwei.text;
select distinct gender,name from liuwei.test;
--模糊查询
--%可以匹配多个,_只能匹配一个
select * from liuwei.test where xieyihao like "%2%8";
select * from liuwei.test where xieyihao like "_170___80";
--and多条件查询
select * from liuwei.test where xieyihao like "%8%" and id<30;
select * from liuwei.test where xieyihao like "%8%" and id in (27,28,29) and gender='女';
--or多条件查询
select * from liuwei.test where xieyihao like "%8" or id<5;
--and/or同时使用,优先进行and运算
select * from liuwei.test where gender='女' or id<15 and name in ('张三','李四','王五','赵六') and xuehao like "%75%";
--4.3高级查询
--4.3.1聚合函数
--求某字段的行数
select count(name) from liuwei.test;
--求某字段的和
select sum(xieyihao) from liuwei.test;
    --求和,使用ifnull给null值设置默认值,如果aa列的值存在null,则使用0代替进行运算
    select sum(ifnull(aa,0)+bb+cc) from exam;
--求某字段的平均值
select avg(xieyihao) from liuwei.test;
--求某字段的最大值
select max(xieyihao) from liuwei.test;
--求某字段的最小值
select max(xieyihao) from liuwei.test;
--4.3.2对查询结果排序
select * from student order by id;
--默认就是按照asc(升序)排列的,所以不加asc也可以
select * from student order by asc id;
--如果是字符串类型,排序会很坑爹,可以通过这种方法多加几个0解决
select * from liuwei.test order by id+0 limit 20;
--组合排序--先按照性别区分开,再分别按照id倒序排列
select * from liuwei.test order by gender,id+0 desc;
--4.3.3分组查询
--group by 单独使用
select gender from liuwei.test group by gender;
--group by 和 聚合函数一起使用
select count(*),gender from liuwei.test group by gender;
--group by 和 having关键字一起使用
select sum(xieyihao),gender from liuwei.test group by gender having sum(xieyihao)>90000;
--4.3.4使用limit限制查询结果数量
select * from liuwei.test order by id+0 limit 20;
--在查询结果中的第4个开始取,取5个结果
select * from liuwei.test order by id+0 limit 3,5;
--4.4给表和字段起别名
表名 as 别名  字段名 as 别名,其中as可以省略
select name stu_name,gender stu_gender,xieyihao xy,xuehao xh from test t where t.id>30;
--第五章多表操作
--5.1外键约束
--添加外键约束
alter table 表名 add constraint FK_ID foreign key (外键字段名) REFERENCES 主表表名 (主键字段名);
alter table student add constraint FK_ID foreign key (gid) REFERENCES grade (id);
--删除外键约束
alter table 表名 drop foreign key 外键名
alter table student drop foreign key FK_ID;
--5.2关联表操作
--添加数据(必须先在主表添加数据,才能给关联表添加数据)
--删除数据(必须先删除副表关联数据才能删除主表的数据,否则会报错)
--5.3连接查询
--5.3.1交叉连接
select * from 表1 CROSS JOIN 表2;
--5.3.2内连接
--只有表1和表2中指定字段相等的才能被显示;
select 查询字段 from 表1 [inner] join 表2 on 表1.关系字段=表2.关系字段;
select employee.name,department.dname from department join employee on department.did=employee.did;
select employee.name,department.dname from department,employee where department.did=employee.did;
--自连接查询
select * from employee p1 join employee p2 on p1.did=p2.did;

五-外键
1.在建表时添加外键
        foreign key(orderdis) references orders(id);
    创建两张表dept和emp,将emp表的id作为外键关联dept表的id字段
        create table dept(
            id int primary key auto_increment,
            name varchar(40)
        );
        create table emp(
            id int primary key auto_increment,
            name varchar(40),
            dept_id int,
            foreign key (dept_id) references dept(id)
        );
2.表已经存在,通过修改表的语句增加外键
        alter table 表名 add constraint FK_ID foreign key(外键字段名) REFERENCES 外表表名(主键字段名);
        alter table emp add constraint FK_ID foreign key(dept_id) REFERENCES dept(id);
3.删除外键
        alter table 表名 drop foreign key 外键名;
        alter table emp drop foreign key FK_ID;
4.多表设计多表查询
    笛卡尔积查询(交叉查询):查询结果是表1的行数乘以表2的行数
        select * from emp,dept;
    内连接查询:只显示左边表有且右边表也有的数据
        select * from emp,dept where emp.dept_id=dept.id;
        select * from emp inner join dept on emp.dept_id=dept.id;
    左外连接查询:在内连接的基础上增加上左边有而右边没有的记录
        select * from dept left join emp on dept.id=emp.dept_id;
    右外连接查询:在内连接的基础上增加上右边有而左边没有的记录
        select * from dept right join emp on dept.id=emp.dept_id;
    全外连接查询:在内连接的基础上增加上右边有而左边没有和左边有而右边没有的记录
        select * from dept full join emp on dept.id=emp.dept_id; # mysql不支持全外链接!
    mysql可以曲线救国实现全外连接查询,使用 union 关键字连接左外连接和右外连接,自动去除重复项并合并查询结果
        select * from dept left join emp on dept.id=emp.dept_id
        union
        select * from dept right join emp on dept.id=emp.dept_id;
    ~查询4号部门的名称和其中的员工的姓名:
        select dept.name 部门名称,emp.name 员工名称 from dept inner join emp on dept.id=emp.dept_id where dept.id=4;
    1.带IN关键字的子查询
        使用IN关键字进行子查询时,内层查询语句仅仅返回一个数据列,这个数据列中的值将供外层查询语句进行比较操作.
        ~查询存在年龄为20岁的员工的部门
        select dname from department where did in (select did from employee where age=20);
        ~查询存在年龄不为20岁的员工的部门
        select dname from department where did not in (select did from employee where age=20);
    2.EXISTS关键字后面的参数可以使任意一个子查询,这个子查询的作用相当于测试,他不产生任何数据,只返回TRUE或FALSE,当返回值为TRUE是,外层语句执行
        ~查询employee表中是否存在年龄大于21岁的员工,如果存在,则查询department表中所有记录
        select * from department where exists (select * from employee where age>21);
    3.ANY关键字标识满足其中任意一个条件,它允许创建一个表达式对子查询的返回值列表进行比较,只要返祖内层子查询中的任意一个比较条件,就返回一个结果作为外层查询的条件
            ~使用带ANY关键字的子查询,查询满足条件的部门
            --先拿到employee表中的did,然后拿department中的did去比较,只要大于employee中的任意一个did就可以满足查询条件
            select * from department where did>any(select did from employee);
    4.带ALL关键字的子查询返回的结果需同时满足所有内层查询条件.
            ~使用到ALL关键字的子查询,查询满足条件的部门
            --先拿到employee表中的did,然后拿department中的did去比较,只有大于employee中所有的did才可以满足查询条件
            --比如 employee 表中最大的did是4,那么 department 表中did必须大于4才能满足查询条件
            select * from department where did>all(select did from employee);
    5.带比较运算符的子查询
            ~使用带比较运算符的子查询,查询赵四是哪个部门的员工
            --先从employee表中拿到赵四的did,再作为查询条件进行department表的查询
            select dname from department where did = (select did from employee where name='赵四');
事务控制
    事务:逻辑上的一组操作,要么同时完成要么同时不完成
    mysql默认就自带事务,但是mysql自带的事务是一条语句独占一个事务
    我们也可自己来控制事务:
        start transaction; -- 开启事务
        ...
        ...
        commit; -- 提交事务,让这个事务中的sql岁数据库的影响立即发生
        rollback; -- 回滚事务,取消这个事务,这个事务不会对数据库中的数据产生影响了.
    事务的特性(ACID)
    原子性(Atomicity):
        事务是一组不可分割的单位,要么同时成功要么同时不成功.
    一致性(Consistency):
        事务前后的数据完整性应该保持一致.(数据库的完整性:如果数据库在某个时间点下,所有的数据都符合所有的约束,则称数据库为符合完整性的状态)
    隔离性(Isolation):
        事务的隔离性是指多个用户并发访问数据库时,一个用户的事务不能被其他用户的事务所干扰,多个并发事务之间数据要相互隔离.
    持久性(Durability):
        持久性是指一个事务一旦被提交,它对数据库中数据的改变就是永久性,接下来及时数据库发生故障也不应该对其有任何影响.
    正常情况下我们不需要这四大特性,数据库的设计者在设计数据库时就已经保证了该数据库符合这些特性,但是隔离性(Isolation)需要我们特殊关照.
    
    mysql提供四大隔离级别应对不同的需求
        read uncommitted -- 不做任何隔离,具有脏读 不可重复读 虚读(幻读)问题
        read committed -- 可以防止脏读 不能防止不可重复读 和 虚读(幻读)问题
        repeatable read -- 可以防止脏读 不可重复读,不能防止虚读(幻读)问题
        serializable -- 数据库运行在串行化末实现 所有问题都没有 但是性能非常的低
        
    从安全性上考虑:
    serializable > repeatable read > read committed > read uncommitted
    从性能上考虑:
    read uncommitted > read committed > repeatable read > serializable
        
    mysql 默认是repeatable read这个隔离级别!
        set [session/global] transaction isolation level ....; -- 修改隔离级别
        select @@tx_isolation; -- 查询当前数据库的隔离级别
    ~查看自动提交事务功能
    show variables like '%autocommit';
存储过程
    存储过程就是把一堆sql语句封装在一起,需要的时候直接调用
    1.创建存储过程
        create procedure 存储过程名称 ([proc_parameter]) [characteristics...]routine_body
            proc_parameter用于指定参数列表:
                [IN|OUT|INOUT]param_name type
                [输入参数|输出参数|既可以输入也可以输出]参数名称 参数类型(MySQL中的任意类型)
            characteristics用于指定存储过程的特性
                LANGUAGE SQL:指定使用的语言,目前只有SQL语言一种而且是默认值,所以不指定也可以.
                [NOT] DETERMINISTIC:明确知道运行结果,相同的输入会得到相同的输出.[NOT]表示相同的输入可能得到不同的输出,运行结果不确定.
                                    默认是[NOT] DETERMINISTIC
        ~创建一个查看student表的存储过程
            delimiter !! -- 这个是改变sql语句的结束标点
            create procedure Proc()
            begin
                select * from student;
            end !!
            delimiter ; -- 最后把结束的标点改回来
    2.在存储过程中定义一个变量
        变量的声明一定要在存储过程的BEGIN和END之间,作用范围是当前的存储过程
            DECLARE var_name[,varname]...date_type[DEFAULT value];
        修改变量的值方式1:
            SET var_name = expr[,var_name = expr]...;
        
        修改变量的值方式2:
            select col_name[...] into var_name[...] table_expr;
        
        ~接下来定义一个名称为myvariable的变量,类型为INT类型,默认值为100
        ~然后对变量进行修改,将值+20并输出
            delimiter //
            create procedure proc2()
            begin
                declare myvariable int default 100;
                select myvariable;
                set myvariable = myvariable+20;
                select myvariable;
            end //
            delimiter ;
        ~定义变量,保存学生表中查询到的班级信息和性别信息
            delimiter //
            create procedure proc3()
            begin
                declare s_grade float;
                declare s_gender char(2);
                select grade,gender into s_grade,s_gender from student where id = 3;
                select s_grade,s_gender;
            end //
            delimiter ;            
    3.定义条件
        DECLARE condition_name CONDITION FOR [condition_type];
            condition_type的两种形式:
            -- ERROR 1049 (42000): Unknown database 'liuweiee'
                SQLSTATE[VALUE] sqlstate_value    -- SQLSTATE就是指的 42000
                mysql_error_code    -- code就是指的 1049
        ~定义"ERROR 1049 (42000)"错误,名称为command_not_allowed
            declare command_not_allowed condition for sqlstate 42000;
            declare command_not_allowed condition for 1049
    3.定义处理程序
        DECLARE handler_type HANDLER FOR condition_value[,...] sp_statement
            handler_type -- 定义遇到错误是的处理方式
                CONTINUE    遇到错误不处理,继续执行
                EXIT         遇到错误马上退出
                UNDO        遇到错误后撤回之前的操作,MySQL中不支持这样的操作
            condition_value -- 满足哪些条件时执行处理方式
                SQLSTATE[VALUE] sqlstate_value 包含5个字符的字符串错误值
                condition_name  标识DECLARE CONDITION定义的错误条件名称
                SQLWARNING      匹配所有以01开头的SQLSTATE错误代码
                NOT FOUNT       匹配所有以02开通的SQLSTATE错误代码
                SQLEXCEPTION    匹配所有没有被SQLWARNING或NOT FOUND捕获的SQLSTATE错误代码
                mysql_error_code匹配数值类型错误代码
    4.光标(游标)的使用
        光标的声明
            DECLARE cursor_name CURSOR for select_statement
        光标的使用
            OPEN cursor_name
            FETCH cursor_name INTO var_name[,var_name]...   ## 这里的变量要在游标之间就定义好
            ...
            CLOSE cursor_name
    5.流程控制的使用
        IF语句
            IF expr_condition THEN statement_list
                [ELSEIF expr_condition THEN statement_list]
                [ELSE statement_list]
            END IF
        ~创建一个存储过程判断变量V的是否是null,输出对应的提示信息
            DELIMITER //
            create procedure proc4()
            BEGIN
                DECLARE v varchar(2);
                set v = 'a';
                IF v is null then select 'is null';
                ELSE select 'not null';
                END IF;
            END  
            //
            DELIMITER ;
        CASE语句
            CASE case_expr
                THEN when_value THEN statement_list
                [THEN when_value THEN statement_list]...
                [ELSE statement_list]
            END CASE
            
            DELIMITER //
            create procedure proc5()
            BEGIN
                DECLARE v int;
                set v = 1;
                case v
                    when 1 then select 'value is 1';
                    when 2 then select 'value is 2';
                    else select 'not 1 or 2';
                end case;
            END  
            //
            DELIMITER ;
        LOOP语句
            [loop_table:]LOOP statement_list END LOOP [loop_label]
            
            DECLARE id INT DEFAULT 0;
            add_loop:LOOP
                SET id = id+1;
                -- leave是用来跳出循环的,后面跟上循环的名字
                -- iterate 再次循环 类似(continue )
                if id>=10 then leave add_loop;
                end if;
            end loop add_loop;
        ~使用loop循环和if判断语句拿到10~20之间的数
            DELIMITER //
            create procedure test1()
            begin
                DECLARE id INT DEFAULT 0;
                my_loop:LOOP
                    SET id = id+1;
                    if id<10 then iterate my_loop;
                    elseif id>20 then leave my_loop;
                    end if;
                    select id ' is between 10 and 20';
                end loop my_loop;
            end //
            DELIMITER ;
        REPEAT语句 -- 类似do..while
            [repeat_lable:] REPEAT statement_list UNTLL expr_condition END REPEAT[repeat_lable]
            
            DECLARE id INT DEFAULT 0;
            REPEAT
                SET id=id+1;
                UNTIL id>=10;
            END REPEAT;
        WHILE语句 -- 类似while语句
            [while_lable:] while expr_condition DO statement_list END WHILE [while_lable]
            
            DECLARE i INT DEFAULT 0;
            WHILE i<10 do
                set i=i+1;
            END WHILE;
6.操作存储过程
    1.执行存储过程
    CALL sp_name([parameter[,...]])
    
    ~定义一个存储过程,查出student表中有多少个女生
    DELIMITER //
        -- 定义存储过程,IN是输入,OUT是返回
        CREATE PROCEDURE CountProc1(IN s_gender VARCHAR(50),OUT num INT)
        BEGIN
            -- 在student表中查询'性别'是'女'的数据的条数,将值赋值给变量NUM
            SELECT COUNT(*) INTO num FROM student WHERE gender = s_gender;
        END //
    DELIMITER ;
    -- 调用存储过程
    call CountProc1("女",@num );
    -- 查看返回结果
    select @num;
    
    2.查看存储过程
        1.SHOW STATUS语句查询存储过程的状态
            SHOW {PROCEDURE|FUNCTION} STATUS [LIKE 'pattern']
            ~案例
            -- 查看所有存储过程
            show procedure status;
            -- 查看存储过程的名称中以2结尾的
            show procedure status like '%2';
        2.SHOW CREATE语句查看存储过程的状态
            show create{procedure|function} sp_name
            ~案例
            show create procedure proc4;
        3.从information_schema.Routines表中查看存储过程的信息
            ~案例
            select * from information_schema.Routines;
    3.修改存储过程
        ALTER {PROCEDURE|FUNCTION} sp_name[characteristic...]
            CONTAINS SQL 标识子程序包含SQL语句,但不包含或写数据的语句;
            NO SQL 标识子程序中不包含SQL语句;
            READS SQL DATA 标识子程序中包含读数据的语句;
            MODIFIES SQL DATA 调试子程序中包含写数据的语句;
            SQL SECURITY{DEFINER|INVOKER} 指明谁有权限来执行;
            DEFINER 标识只有定义者自己才能够执行;
            INVOKER 标识调用者可以执行;
            COMMENT'string' 标识注释信息
            
        **可以修改存储过程的特性,MySQL还不提供对已存在的存储过程代码的修改,如果一定要修改,先删除再重新创建.
    4.删除存储过程
        DROP{PROCEDURE|FUNCTION}[IF EXISTS] sp_name
        ~案例
视图
    1.在单表上创建视图
    ~创建视图包含 数学 语文 数学+语文
        -- 创建视图
        create view view_stu as select math,chinese,math+chinese from student;
        -- 查询视图
        select * from view_stu;
        -- 创建同名视图,使用or replace替换同名表格并为视图中的字段名添加别名
        create or replace view view_stu (数学,语文,总分) as select math,chinese,math+chinese from student;
        -- 查询视图
        select * from view_stu;
    2.在多表上创建视图
    ~创建视图包含 编号 学生的姓名 和 班级
        create view stu_class (编号,姓名,班级)
        as
        select student.s_id,student.name,stu_info.class from stu_info,student where stu_info.s_id=student.s_id;
        -- 查询视图
        select * from stu_class;
    3.查看视图
        1.desc 视图名; -- 查看视图结构
        2.show table status like '视图名'; -- 查看视图信息
        3.show create view 视图名; -- 查看视图的创建语句
    4.修改视图
        1.使用create or replace view语句修改视图
            ~使用create or replace view语句修改view_stu视图
            create or replace view view_stu as select * from student;
        2.使用alter语句修改视图
            alter [algorithm = {undefined | merge | temptable}]
            view view_name [(column_list)]
            as select_statement
            [with[cascaded | local] check option]
            
            ~使用alter修改视图结构
            alter view view_stu as select chinese from student;
    5.更新视图
        -- 因为视图是依赖基本表创建的,所以修改方式与普通标相似
        -- 修改视图中的数据会直接对关联的基本表数据进行修改,反之亦然
        1.使用update语句来更新视图
            update view_stu set chinese = 100;
        2.使用insert语句来更新视图
            insert into student values (4,'lili',20,30);
        3.使用delete语句来更新视图
            delete from view_stu where chinese = 30;
    -- 更新表注意事项:
        -- 视图中不包含基本表中被定义为非空的列
        -- 在定义视图的select语句后的字段列表中使用了数学表达式
        -- 在定义视图的select语句后的字段列表中使用聚合函数
        -- 在定义视图的select语句中使用了distinct,union,top,group by或having子句
    6.删除视图
        drop view [if exists] view_name [,view_name1]...[restrict | cascade]
        
        ~删除view_stu2视图
        drop view if exists view_stu;
备份还原数据库
    1.备份数据库
        mysqldump: -- 使用此命令将一个指定的数据库(可以指定库中具体的表) 输出到一个sql文件中
            在cmd下,mysqldump -u username -p password dbname [tbname1 [tbname2...]] > filename.sql
    2.恢复数据库 -- 恢复数据库只能护肤数据库中的表和表记录,不能恢复数据库本身
        方法1:mysql:
            -- 先登录数据库,然后将之前丢失的库建立起来 (create database xxx)
            -- 将之前备份的sql文件导入
            在cmd下,mysql -u 用户名 -p [密码] [dbname] < filename.sql
        方法2:source命令:
            在mysql命令提示符下:创建数据库 进入数据库 source xxx.sql文件 将备份的sql文件在当前位置执行,恢复出其中的内容
创建用户
    使用grant语句创建用户 -- 这个语句其实是授权语句,当被授权的用户不存在的时候就会顺便创建该用户
        grant privileges on database table
            to 'username'@'hostname' [identified by [password]'password']
            [,'username'@'hostname' [identified by [password]'password']] ...
        ~创建一个普通用户
        grant select on mydb3.* to 'wangxiaokun'@'localhost' identified by 'abc123';
    使用create user语句创建用户
        create user 'username'@'hostname'[identified by [password]'password']
            [,'username'@'hostname'[identified by [password]'password']]...
        ~创建一个用户
        create user 'wangxiaokun'@'localhost' identified by 'abc123';
    使用insert语句插入一个用户
        insert into mysql.user(host,user,authentication_string,ssl_cipher,x509_issuer,x509_subject)
        values ('hostname','username',password('password','','',''));
        flush privileges;
        ~用insert语句插入一个用户
        insert into mysql.user(host,user,authentication_string,ssl_cipher,x509_issuer,x509_subject)
        values ('localhost','wangxiaokun',PASSWORD('abc123'),'','','');
        flush privileges;
删除用户
    drop user 'username'@'hostname'[,'username'@'hostname'];
    ~案例
    drop user 'wangxiaokun'@'localhost';
    
    delete from mysql.user where host='hostname' and user='username';
    flush privileges;
    ~案例
    delete from mysql.user where host='localhost' and user='wangxiaokun';
    flush privileges;
修改密码
    1.修改root用户的密码
        ~第一种方式: -- 注意里面的'password'是一个字符串,不是你之前的密码
            mysqladmin -u username [-h hostname] -p password new_passwrod
            C:\Documents and Settings\[当前windows用户的目录]>
        ~第二种方式:
            update mysql.user set password=password('new_passwrod')
            where user='username' and host='hostname';
            flush privileges;
            
            update mysql.user set password=password('liuwei') where user = 'root' and host='localhost';
            flush privileges;
        ~第三种方式:
            必须用root用户登录,执行
            set password=password('new_passwrod');
    2.利用root用户修改普通用户的密码:
        方式1:
            grant usafe on *.* to 'username'@'localhost' identified by [password]'new_passwrod';
        方式2:
            update mysql.user set password=password('new_passwrod')
            where user='username' and host='hostname';
            flush privileges;
        方式3:
            set password for'username'@'hostname'=password('new_passwrod');
    3.普通用户修改自己的密码
        普通用户登录到数据库中
        set password=password('new_passwrod');
给xx表添加唯一约束 ALTER TABLE logixxxs_xxer_sxxck ADD UNIQUE (LogisticsUserID,LogisticsProductID);        


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值