时间:2021-07-01 10:21:17 帮助过:14人阅读
  建立账号:create user 用户名@‘所有者‘ identified mysql_native_password by ‘密码‘;
		
	  授权:	grant 权限 on 作用域 to 用户;
		  grant all privileges on *.* to linux;
		  grant select name on db.student to admin;
  撤权: revoke 权限 on 作用域 from 用户;
		  revoke select on students.* from linux;
		
		  权限:select、insert、drop、update、grant、create、revoke、alter 等
		  作用域:数据库.表
			  *代表所有
改密码:mysql5.7以前密码有加密函数:password(‘密码‘)
set password=‘密码‘; --默认为root账户
set password for 用户名=‘密码‘;
查看权限:desc mysql.user;
show grants for 用户;
select * from mysql.user where user=‘用户名‘ and host=‘所有者‘\G;
导入、还原数据库:1、工具导入(SQLyog):导入→执行SQL脚本(ctrl+shift+Q)
2、在mysql中导入:mysql>source d:/db.sql;
3、在mysql外导入:mysql -uroot <d:/db.sql
导出、备份数据库: 1、工具导出(SQLyog):导出/备份→备份数据库,转储到SQL(ctrl+shift+E)
2、在mysql外导出:①导出多个数据库:mysqldump -uroot --databases db1 ab2 db3 > d:/db.sql
②导出一个数据库中多个表的数据与结构:mysqldump -uroot -p db t1 t2 > d:/m.sql
说明:>前面加-t是只要表的数据、加-d只要表结构(操作)
全部数据库表示为-A
数据类型:
    	  1、数字:	 整数  	tinyint、smallint、int、bigint
		        小数 	decimal(p,s):p为总字数限制,s为小数限制   如:decimal(3,2)   9.9  
			      
	  2、字符串 :char(18)  18个字节 
			        varchar(50)   50个字符
			        text 
			        longtext 
	  3、日期时间: datetime  时间与日期  2019-08-20 15:59:30
			         date  日期  2019-08-20
	  4、二进制
	  5、复合类型
      	enum() 枚举:  gender enum(‘男‘,‘女‘,‘保密‘);
			      set()集合 :set(‘java‘,‘php‘,‘python‘);   
                                                               ‘java‘   ‘php,python‘  ‘python,php,java‘  ‘html,php‘
	  6、JSON 类型  (NoSQL 特性)
操作:(table后面可接if判断条件以是否执行 如:drop table if exists student;)
导入数据库:source 文件名;
   一、建立表(先use 数据库;)
	    create table 表名(
     		      `列名`  数据类型  约束,
     		      ...
	    )engine=innodb charset=utf8;
 	 
	    如:create table if not exists student(
   	       sno int unsigned auto_increment primary key,
    	       sname varchar(30),
   	       sgender enum(‘男‘,‘女‘),
   	       sbrithday datetime,
   	       smoney decimal(8,1),
  	       sdept varchar(50)default ‘计算机科学‘,
	       sinfo text
	     )engine=innodb charset =utf8 auto_increment = 201601;
          二、   查看表数据:select * from 表名;
        	  查看表结构:desc 表名;
         	   修改表:
           	  -- 修改表名
	  alter table 表名 rename to 新名;
	  rename table 表名 to 新名;
           	  -- 增加一列 
 	  alter table 表名 add `列名` 数据类型;
	  alter table 表名 add `列名` 数据类型 after;
	  alter table 表名 add `列名` 数据类型 first;
           	  -- 修改列名及类型(缺一不可)
	  alter table 表名 change 列名 新名 数据类型;
         	   -- 删除一列
	  alter table 表名 drop `列名`;
         	   -- 删除表
	  drop table 表名;
	  drop table if exists 表名;
三、增删改(where后面用索引信息定位,一般用主键的值)
	    增:	插入一条:insert 表名 values(以逗号隔开,字符串用‘‘,空则填null,不可不填)
		    插入多条:   insert 表名 values(),(),();
		    插入部分字段:insert 表名(`列名`,`列名`) values(值,值);
		    insert没有插入指定位置之说,因为一般主键是int类型,而表是按主键排列的,若要‘指定’,注意插入条的主键序号
	
	    删:	delete from 表名 where `某列名`=值;
	    改:	update 表名 set `列名`=值 where 用字段定位;
		    update 表名 set `列名`=值,`列名`=值 where 用字段定位,用字段定位;
	
            四、查:(重点,若语句多,可换行区分)
	    普通计算:select 函数;	
		    如:此时:now()、往时:date_add(now(),interval 10 day)、来时:date_add(now(),interval -10 day)、小时:hour(now())、唯一字符串:uuid()
	
	    查询数据:select 查看的字段 from 表名  条件;
	    别名格式:select 查看的字段  别名  from 表名  条件;
①查看的字段:就是查看的内容以列名或函数计算、并以字段形式显示,写一个就显示一列,查看多个就用逗号隔开。(*表示表中所有字段)
1、对查看的内容消去重复:distinct+字段名,如:
select distinct address ...
		      2、普通函数:  ·计行函数:count(*)
			                       ·int函数:max()、min()、avg()、sum()、round()、floor()、abs()、ceil()、sqrt()
			                       ·字符串(时间)函数:char_length()、length()、now()、 from_unixtime(时间戳)、unix_timestamp(‘2006-11-04 12:23:00‘)、concat(连接函数)、concat_ws(分隔符写在第一个位置)、
repeat(重复函数)、upper()、lower()、left(字符串,取用个数)、right(str,length)、mid(截取)
这些函数作为字段,不能直接当作值来用,若要用:如s=max(),可用子查询,用select的结果作为值,如:s=(select max(sno)...)
			               3、子查询:将首先查看到的结果括起来作为 新表!用来再select
				                  如查看成绩最高的学生信息:select * from students where grate =(select max(grate) from student);
		      4、if函数:以if()的返回值作为查看结果
			            if( 条件,值1,值2)
			             if(条件,值1,if(条件,值2,...))
			             如:
			               select 等级,count(*) 人数 from 
				               (select sname 姓名,
      				                 sperformance 成绩,
     				                  if(sperformance>=90,‘优秀‘,if(sperformance>=80,‘良好‘,if(sperformance>=60,‘及格‘,‘补考‘))) 等级 
      			 	                from students
				                ) ss group by 等级;
      5、排序、排名
			        5.1、新增一个排序字段:select row_number() over(order by 列名 desc) 序号 from...
			        5.2、新增一个排名字段:
				            跳号排名:select rank() over(order by 列名 asc) from 表名 order by 列名 asc;
				            不跳号 排序:select dense_rank() over(order by 列名 desc) from 表名 order by 列名 asc;
					              select rank() over(order by `grate` asc) from students order by `grate` asc;
		
	    ②条件:就是对前面字段进行要求、限制条件,从而筛选数据,好比为:前面查看的是哪些列(字段),而索引查看的就是哪些行(条),没有条件,所有条数据就全查看了
		      1、指定查看哪些行:
				         limit 行数;
			     	         limit 开始行,行数;
				          select * from students limit 0,10;
		      2、查询语句where:where  `列名`   如下+数据
				            =、!=、>、<、>=、<=:判断值
				            and:且
				            or:或
				            like、not like:  可以使用通配符:%(表示0,1或多个,如:‘%为%‘,‘王%‘)    _(表示一个字符,如:‘__‘,‘李_‘)
				            in()、not in()	
				            is、is not:表示`是非`,用于判断性质(而非判断值)!如:select * from students where name is not null;
				            regrep:正则表达式,如:‘^[0-9a-zA-Z]+$‘
				            between .. and .. :用于日期,数字等有序数据,如:select * from stu where `birthday` between ‘1990-1-1‘ and ‘2000-1-1‘;
				            not between .. and ..			
		      3:分组语句group by :根据后面,相同的分为一组having 
			          select left(sname,1) 姓,count(*) 人数 from students group by left(sname,1) having count(*)>=5 order by count(*) desc;
		      4:排序语句order  by:
				          升序(默认):order by `列名` asc
			                             降序:order by `列名` desc
		
	    ③union:连接两个查询语句一并显示,前提是两者表结构相同
	    ④外键(关联另外一个表,跨表查看):constraint fk foreign key(列名) references 表名(列名)
		      外键必须都是唯一索引(一般是其他表的主键)	
		      在表中设立一个外键:constraint fk foreign key(tid) references teacher(id)
		        select s.`id`,s.`name`,s.`grate`,t.`name` from student s,teacher t where t.`id`=s.`id`;
		        select s.`id`,s.`name`,s.`grate`,t.`name` from student s,teacher t from student left join teacher on t.`id`=s.`id`;
           五、复制表(备份):
		    复制表结构:create table 新表名 like 表名;
		    复制表数据:insert 新表 select * from 表名;
		    仅复制表数据:create table 新表 as select * from 表名;
		    也可以部分复制:create table 新表 as select  列名,列名  from 表名;
说明:
0、	用户尽量用像  root@%、linux@‘192.168.10.11‘  这样的格式
	列名最好用``包住
1、一列称为一个字段(field),其名叫做列名
2、建立字段的约束条件有:	①auto_increment primary key(主键:唯一索引)
			②注释:comment,默认:default,无负号:unsigned
3、表名用->可用数据库.表名<- 实现跨库操作表  
4、单元格内容不可啥都不填,若想表示‘无数据’填null ,若想表示‘空数据’,填0或‘‘
5、drop 删除:数据库 、表、账号,delete删除数据
6、查看多个表:select *from stu1,stu2,stu3;
7、赋予权限后及时刷新权限:flush privileges
8、普及:角色是权限的集合
mysql 相关知识与操作
标签:max linu php smon 默认 after 第一个 进制 去重复