mysql desc 二个属性_mysql 基础语法

以下为自己学习mysql 的一些笔记,以方便查询

目录

一、 ALTER的 语法

二、 表的完整性约束

三、 索引的操作(mysql 数据库支持至少 16 个索引)

四、 视图的操作

五、 触发器的操作

六、 单表查询数据记录

七、 多表数据记录查询

八、 使用mysql 常用函数

九、 mysql 的存储过程和 函数的操作

十、 mysql 游标的 使用

十一、 mysql 的日志管理

十二、 mysql 的维护和 性能提高

十三、 mysql 的安全机制

一、 ALTER的 语法

1.修改表名

Alter  table  old_tab_name rename  [to]  new_tab_name

2.在表的最后一个位置增加字段

Alter  table  table_name  add 属性名 属性类型

3.在表的第一个位置增加字段

Alter  table  table_name  add  属性名 属性类型 first

4.在表的指定字段后面添加字段

Alter  table  table_name  add  属性名   属性类型  after 属性名

5.删除字段

Alter  table  table_name  drop  属性名

6.修改字段

Alter  table  table_name  modify  属性名  数据类型

7.修改字段的名字

Alter  table table_name  change  旧的属性名 新的属性名 旧数据类型

8.同时修改字段的名字 和 属性

Alter  table  table_name  change  旧属性名 新属性名  新数据类型

9.修改字段的 顺序

Alter  table table_name  modify  属性名1数据类型  first | after 属性名2

二、表的完整性约束

单列约束 : 即每个约束只是约束一列数据

多列约束 : 每个约束可以约束多列数据

完整性约束

Not  null   约束字段值不能为空

Default 设置字段的默认值

Unique  key(UK)约束的字段值是唯一的

Primary  key(PK)约束的字段为表的主键,是表的唯一标识

Auto_increment 约束字段的值自动添加

Foreign key(FK)外键

设置唯一约束

Create  table  table_name(

属性名  数据类型  unique  字段名 ,

);

多字段唯一约束

Create  table  t_dept(

deptno  int,

Dname char(21),

Constraint  uk_name  unqiue(dname)

);

3.多字段主键

Create  table   table_name(

属性名  数据类型,

【 constraint 约束名 】primary  key (属性名 , 属性名 .... )

);

外键约束 【 设置了FK 约束必须依赖于数据库中以及存在的父表的 主键 】

Create  table table_name (

属性名  数据类型,

...

Constraint  外键约束名  foreign  key  (属性名1)

References  父表名(字段名1)

)

三、索引的操作(mysql 数据库支持至少 16 个索引)

INNODB  默认使用的存储引擎支持 BTREE类型索引

MerMory 存储引擎支持HASH类型索引

1.索引的分类(6种)

普通索引

唯一索引

全文索引

单列索引

多列索引

空间索引

2.何时使用索引

经常被查询的字段, 即在where 子句中出现的字段

在分组中的字段, 即在 group by下的字段

存在依赖关系的字段,如主键和外键

拥有许多重复值的字段

3.普通索引的创建

创 建表的时候 创建索引

Create table tab_name(

字段名  数据类型,

...

Index | key 【索引名】 (属性名1【长度】 【 asc | desc 】)

)

在建好的表上创建索引

Create index  索引名  on 表名(属性名 【长度】 【 asc | desc 】)

使用alter table 创建索引

Alter  table  tab_name  add  index | key  索引名(属性名 【长度】 【 asc | desc 】)

4.唯一索引的创建

创 建表的时候 创建索引

Create table tab_name(

字段名  数据类型,

...

Unqiue  Index | key 【索引名】 (属性名1【长度】 【 asc | desc 】)

)

在建好的表上创建索引

Create  unique   index  索引名  on 表名(属性名 【长度】 【 asc | desc 】)

使用alter table 创建索引

Alter  table  tab_name  add  unique  index | key  索引名(属性名 【长度】 【 asc | desc 】)

5.全文索引的 创建

创 建表的时候 创建索引

Create table tab_name(

字段名  数据类型,

...

Fulltext  Index | key 【索引名】 (属性名1【长度】 【 asc | desc 】)

)

在建好的表上创建索引

Create fulltext  index  索引名  on 表名(属性名 【长度】 【 asc | desc 】)

使用alter table 创建索引

Alter  table  tab_name  add  fulltext  index | key  索引名(属性名 【长度】 【 asc | desc 】)

6.多列索引的创建

创 建表的时候 创建索引

Create table tab_name(

字段名  数据类型,

...

Index | key 【索引名】 (属性名1【长度】 【 asc | desc 】,

....,

属性名n 【长度】 【asc | desc 】)

)

在建好的表上创建索引

Create index  索引名  on 表名(属性名 【长度】 【 asc | desc 】,

....

属性名n【长度】 【asc | desc 】

)

使用alter table 创建索引

Alter  table  tab_name  add  index | key  索引名(属性名 【长度】 【 asc | desc 】,

....

属性名n 【长度】 【asc | desc 】

)

7.删除索引

Drop index  index_name  on  table_name

8.查看索引

Explain  select  *  from  table_name  where .....

四、视图的操作

对于视图数据可以进行增删改 操作

视图来自多个表的 时候不允许增删数据

1.视图的 创建

Create  view  view_name  as  查询语句

2.删除视图

Drop  view  view_name ;

3.查询视图

Select  查询字段  from  view_name

4.查看视图的 相关信息

Show table status  like  ‘view’ ;

Show table status  like  ‘view_name(自定义的view )’ ;

5.Show create view view_name

6.通过系统表(information_schema) 查看视图信息

Use  information_schema ;

Select  *  from  views  where  table_name  =’view_name(自定义的视图名)’;

7.修改视图

替换或是创建视图的方法

Create  or  replace  view  view_name  as  查询语句

Alter 语句修改视图

Alter  view  view_name  as  查询语句

五、触发器的一操作

1.在触发器进行下面操作语句时, 会触发触发器

Delete   insert   update

2.创建单条语句的 触发器 trigger

Create  trigger  trigger_name

Before | after  触发事件(update | insert | delete)

On 表名 for  each  row

触发的语句

3.创建多条触发器

Creater  trigger  trigger_name

Befor | after  触发事件(update | insert | delete)

On  表名  for  each  row

Begin

触发的语句

End

4.查触发器

Show triggers ;

5.通过系统表来 查看触发器

Use information_schema

Select  *  from  triggers    //查看所有的触发器

Select  *  from  trigger_name(查询的触发器名)

6.删除触发器

Droptriggertrigger_name

六、单表查询数据记录

主要学习内容有:

简单数据记录查询

条件数据记录查询

排序数据记录查询

限制数据记录查询

统计函数 和 分组数据记录查询

1.避免 重复数据查询

Selectdistinct  field1 ,field2  from  table_name ;

2.设置格式显示数据查询

Select  CONCAT(filed1 , ‘文本解释内容’, value ) from table_name;

Select  concat(ename,’雇员年薪是:’,sal*12) from emp;

条件数据 记录查询

带有关系运算符和 逻辑运算符的 数据查询

带有between and 关键字的 条件查询

带有is null 关键字的 条件记录查询

带有 in 的条件记录查询

带有  like 的条件记录查询

A.between  and

Select filed1 , field2 ...  From table_name  where  field  between value1 and  value2

B. 不符合 范围的数据记录查询

Select filed ...  From table_name  where filed  not  between value1 and value2

C. 带 IS   NULL 的关键字查询

Select  field ....  table_name where  filed  is   null

D. 带 in  关键字 的 集合查询

Select filed ... From table_name  where  filed in (value1,value2,value3,....)

该情况类似于:

Select  filed form table_name  where  filed=value1 or  filed=value2 or ....

E.带like 的模糊查询

Select filed ....  From  table_name  where  filed  like value;

Select filed .,.. From  table_name   where   filed   not  like value

Select filed .,.. From  table_name   where   not   filed   like value

<

“_”    该字符表示, 通配符能匹配单个字符

“%”   该通配符表示可匹配任意字符的模糊查询

>

4.排序数据记录查询

Select   filed  ...  From  table_name  where   条件(contition  )  order  by  filed1_name   [asc | desc ] ,  file2_name [ asc | desc ]

5.限制 数据记录查询 数量

Select  filed ....  From  table_name  where   条件语句 limit  offser_start , row_counts;

6.统计记录查询 (avg count sum max min )

Select  function(filed)  from  table_name  where  条件语句 ;

*关于统计函数的 注意点

对于mysql 的统计函数 ,如果操作的表中没有任何数据记录 , 则 count() 函数会返回数据0, 其他的 函数 返回值为  null

7.分组数据 查询

Select  function()  from   table_name  where  条件语句  group  by  filed;

8.实现统计功能 的 分类查询

Select   group_concat(filed)  from  table_name  where  条件语句  group  by  filed;

10.实现多个分组的 查询

Select  group_concat(filed), function(filed)  From  table_name  where  condition  group  by   Filed1 , filed2  ...;

11.分组的 数据查询 -- 实现 having 子句限定分组查询

Select  function(filed) from table_name  where  group  by  filed1 ,filed2

Having  contition

七、多表数据记录查询

1.内连接查询

Select filed1 ,filed2 ..... Filedn   from  join_table_name1  inner  join  join_table_name2  [ inner join  join_table_name_n ]  on   连接条件

例子:

Select  e.empno  , e.ename , e.sal , e.job , l.ename  from  t_employee  e  inner  join  t_employee  l  on   e.agr =  l.empno ;

select  e.empno  ,  e.ename  , e.sal  ,e.job , l.ename ,d.dname  ,d.location  from t_employee  , t_employee  l ,  t_dept  d  where   e.mgr =l.empno a and  l.deptno  = d.deptno  ;

2.外连接查询

select  filed1,  filed2  ... Filed_n   from   join_table_name1

Left | right | full  join  join_table_name2  on  连接条件

3.合并查询数据记录

select  filed1 , filed2 .....  Filedn  from  tablename1

Union  | union  all

Select  filed1,  filed2  ....  Filedn  from  tablename2

.....

4.子查询

带 in 的子查询

Select  *  from  t_employee  where  deptno  in  (select  deptno  from  t_dept)

带 any  的子查询

=any : 它的功能与关键字一样

>any(>=any): 比子查询中返回的数据记录最小的还要大于数据记录

Select  ename ,  sal  from  r_employee  where  sal  > any  ( select  sal  from t_employee  where  job=’manager’ )

返回结果为多列的列子查询

Select  count(*)  numberfrom  t_dept  d ,

( select  deptno dno , count(empno)  number, avg(sal)  average  from  t_employee  group  by  deptno )   employee ;

八、使用mysql 常用函数

字符串函数

数值函数

日期函数

系统信息函数

1.常用的字符函数

1)合并字符串的函数 concat()  和 concat_ws() 函数

Concat ( s1 ,s2c , ... S_n )

Concat_ws( sep ,  s1 , s2 ... S_n );  -- sep 为分隔符

例子: Concat_ws( ‘-’ , ‘098’ , ’75914’  );

2) 比较字符串大小函数 strcmp()

Strcmp( str1, str2);

3) 获取字符串长度length()  和 char_length()

Length( str)

Char_length( str)

4) 实现大小写转换函数 upper()  和 字符数函数  lower()

Upper()  函数 等同于 ucase()

Lower()  函数等同于  lcase()

5) 查找字符串位置函数

Find_in_set( str1, str2)            / /返回字符串函数位置

Filed( str ,str1,  str2, str_n.... )/ /返回字符串指

定位置的函数

Locate( str1, str2)

Position ( str1 in  str2)

Instr ( str, str1)                 // 查找字符串匹配的位置

6) 截取字符串函数

Left ( str,num )

Right( str ,  num )

Substring( str,num , len  )   //截取指定位置和长度的字符串

7)替换字符串  insert() 函数  replace () 函数

Insert( str, pos , length , 替换后的字符 ) ;

Replace ( str, 替换的内容 , 替换后的字符);

8)去除首尾空格函数

Ltrim( str)

Rtrim( str)

Trim( str)

2.使用数值函数

Abs (x)  返回数值 x 的绝对值

Ceil (x)返回大于 x 的最大整数值

Floor(x)返回小于 x 的最大整数值

Mod(x)           返回x 模 y 的值

Rand(x)返回 0~ 1之间的随机数

Round(x, y)返回数值 x 的四舍五入后有 y 位 小数的数值

Truncate(x ,y)返回数值 x 截取 位数为 y 位的数值

3、使用日期函数和时间函数

Curdate() 和 current_date()获取的前日期

Curtime() 和 current_time()获取当前时间

Now()获取当前的日期时间

Unix_timestamp(date)获取当前date 的 unix 时间戳

Form_unixtime()获取 unix 时间戳的日期值

Utc_date()国际协调时间

Utc_time()

Week(date)返回当前日期是一年中的那一天

Year(date)返回日期date的年份

Hour(time)返回时间的小时值

Minute(time)分钟值

Second(time)秒数值

Monthname(date)返回时间的月份值

例子:

Selectnow()  当前时间和日期,

YEAR( NOW()) 年,

-- Quarter(now()) 季度 ,

Month(now())月份,

Week(now())    星期,

Dayofmonth( now()) 天,

Hour(now()) 小时 ;

1)  获取指定值的函数 extract( )

SelectExtract( type  from  date )

例子:selectextract( year from  now() );

2) 关于星期的 函数

Dayname()星期几的英文名

Dayofweek()返回是一星期中的第几天

Weekday()返回星期几

3) 计算日期和 时间的函数

To_days(date)

From_days(date())

Datediff( date1 , date2)

例子:

Selectnow() , to_days(now()) 相隔天数,

From_days(to_days(now()) 一段时间后的日期和时间,

Datediff(now() , ‘2000-1-1’);

Selectdatediff(now() , ‘2000-1-1’);

4)  于指定日期时间的操作

Adddate(date , n)表示 n 天后的日期

Sundate(date ,n)表示 n 天前的日期

Addtime(time, n)表示 n 秒后的时间

Subtime(time, n)表示 n 秒前的时间

4.使用系统信息函数

Version()返回数据库版本号

Datebase()返回当前数据库名字

User()返回当前用户

Last_insert_id()返回最近生成的 auto_increment 值

例子:

Selectversion() , user() ,datebase();

5.实现特殊功能的函数

Password(str)对于字符串 str 进行加密

Format(x , n)实现将数字 x 进行格式化 ,保留n 位小数

Inet_aton(ip)把 ip 地址 转换成数字

Inrt_ntoa(x)实现将数字转换成 ip

Get_loct(name , time)新建一个持续时间 为 time的名为 name 的锁

Release_loct(name)解锁

Benchmark( counter  , expr)把表达式执行 count 次

Convert(s using cs)实现将字符串s 的字符集变成 cs

Convert(x ,type)实现将x 变成 type 类型

九、mysql 的存储过程和 函数的操作

1.创建存储过程

Create  procedure  procedure_namebegin---   end;

2.创建函数

Create  function  function_name

3.定义存储过程 和 函数 的参数

Parameter_name   type   ;

如:  name  int;

4.关于存储过程 和函数的表达式

1) 声明变量

Declare  var_name  type  【 default  value 】

2) 赋值变量

Set  var_name = expr

3) 使用 select .... Into 实现赋值

Select  filed_name  into  var_name   from   table_name  where  condition(条件);

4) 定义条件

Declare  condition_name   condition  for  condition_value  ;

5.删除存储过程 和 函数

Drop  procedure  procedure_name;

Drop  function   function_name;

修改 存储过程 和函数

Alter procedure procedure_name [ 修改 内容语句 ]

Alter function function_name [ 修改 语句 ]

7.使用流程语句

If  search_condition  then  statement_list

. . .

End if

Case  case_value

When  when_value  then   statement_list

...

Else  statement_list

End  case

8.循环控制语句

1) [ begin_label : ]  loop

Statement_list

End  loop  [ end_loop ]

Leave  begin_label  // 离开标签

2)   [ begin_label : ]  while  searcg_condition do

Statement_list

End while [ end lable ]

3)   [ begin_label : ]  repeat  search_condition  do

Statement_list

End  repeat  [ end_list ]

9.查看 存储过程 和 函数

1)通过 show status  语句查看函数和存储过程

Show procedure status  [ like  ‘pattern’ ]

Show function  stutus  [ like  ‘pattern’ ]

2)通过 系统表 information_schema.routines  查看函数和存储过程

Use  information_schema

Select  *  from  routines  //

3)通过 show  create  语句查看函数和存储过程]

十、mysql 游标的 使用

1.声明 光标

Decade  cursor_name  cursorfrom  select_statement[sleect查询语句];

2.打开光标

Open   cursor_name

3.使用 光标

Fetch  cursor_name into   var_name ....

4.关闭光标

Close  cursor_name;

十一、mysql 的日志管理

1.二进制日志: 该日志文件会以二进制的形式记录下数据库的各种操作,但是不会记录查询语句

1)修改my.ini:

[mysqld]

Log-bin[=save_bin_path\filename]   //保存二进制文件的目录

2)查看二进制文件

Mysqlbinlog  filename.number

3)停止或是 开启二进制文件

Set sql_log=0;   //关闭

Set sql_log=1;//开启

4)删除二进制文件

Reset mater  ;-- 删除索引的二进制文件

Purgemaster logs  to  filename.number; -- 删除所有编号小于二进制文件的日志文件

Purge  master  logs  before  ‘yyyy-mm-dd’ ; --删除指定时间的日志文件

5) 利用 mysql 二进制文件进行恢复数据库

-- 恢复在时间点前开始的数据备份

Mysqlbinlog  -- start  - datetime = ‘ 时间点’  -u root  -p

-- 恢复在时间点后的数据备份

Mysqlbinlog  --stop  -datetime =’时间点’  -u  root  -p

-- 恢复在 某一个位置 的 数据备份

Mysqlbinlog --start【stop】  -position=’该位置的id’  -u  root  -p

2.错误日志: 该日志文件 会记录mysql 的启动 、关闭 、运行时出错的信息

1)修改 my.ini 文件

[mysqld]

Error-bin[=path\filename]

2)删除错误日志文件

Mysqladmin  -u  root  -pflush  -logs

3.其他类型日志

查询日志  :该类型 的日志包括  通用查询日志 和 慢查询日志

通用查询日志: 记录用户登录和记录查询语句

慢查询 日志:记录执行时间超过 指定时间的 各种操作

1)修改 my.ini

[mysqld]

Log [=path/filename]

2)配置慢查询文件

[mysqld]

Log-slow-queries [=path\filename]

Long_query_time=n -- 设定时间

3)删除慢查询日志文件

Mysqladmin -u root  -p  flush  -logs

十二、mysql 的维护和 性能提高

1.通过 mysqldump 是显示数据备份

1) 备份一个数据库

Mysqldump  -u username  -pdbname  table_name  > backup_name.sql

2)备份多个数据库

Mysqldump -u username  -p--datebases  dbname  , dbnamen .... > path\database_back.sql

3)备份所有数据库

Mysqldump  -u  username  -p--all-datebases  > backup_name.sql

2.使用 mysqldump 还原数据库

Mysqldump-uusername-p[ dbname ]

3.实现数据库中的表导出成文本文件

1)利用 select ...  Into  outfile 方式来实现导出操作

Select  [ filed_name ]  from  table_name  [ where contion ]  into  outfile  ‘filename’  [ option ]

例子:

Select  *  from  t_dept  into  outfile   ‘c:/file_name.txt ’  --输出的文件

Fileds  terminated by  ‘\,’   -- 段结束符

Optionally  enclosed  by  ‘\ “’ --字段结束符

Lines  starting  by  ‘\>’--行结束符

Terminated  by  ‘\r\n’ ;

2)利用mysqldump 命令实现 导出的操作

Mysqldump  -u  root  -p  -T  c:\ database_name.txt

3)利用mysql 命令来实现导出操作

Mysql  -uroot  -p  -e  “select  [ file_name ]  from  table_name”  dbname > file_name;

4.实现文本文件导入到数据库表

1)使用 “load  data  infile” 方式导入数据

Load  data [local ]  infile  file_name  into  table  table_name  [ option ]

2)使用 mysqlimport  命令来实现导入操作

Mysqlimport  -u root  -p  [ --local ]  dbname  file_name  [ option ]

十三、mysql 的安全机制

1.创建普通用户

1)使用 create user 创建用户

Create  user  username  [ identified  by  password ]

2)使用insert 语句创建用户

Insert into  user( host , user , password )  values( ‘’ , ’’ , ’’);

执行 一下语句使其生效

Flush  privileges ;

3) 执行 grant 语句来创建用户

Grant  priv_typeon  databasesname.table  to

username  [ identified  by  password  ]

...

2.修改用户密码

1)使用 mysqladmin 修改用户密码

Mysqladmin -u  username  -p  password  new_password

2) 用户登录后 可以修改 用户的密码

Set password = password( ‘new_password’);

3) 更新系统表 mysql.user 数据记录修改密码( 限于 root 用户 )

Update user  set  password=password(‘new_password’)

Where  user =”user_name” and  host = ‘localhost’ ;

4)使用grant 来修改密码

Grant  priv_typeon  databasesname.table  to

username  [ identified  by  “new_password”  ]

3.删除 普通用户账号

1) 使用 drop user 语句

Dropuser  user1,  user2....

2)使用 mysql.user 表来实现删除 普通用户账号

Deletefrom  user  where= ‘user_name’  and  host = ‘ localhost ’ ;

4.权限管理

1)对用户进行授权

Grant priv_type  [ (column_list) ]on  database.table  to  user  [ identified  by  password  ]  with  with_option

2) 授权的权限 有

Grant  option :被授权用户可以授权给其他用户

Max_queries_per_hour count:每小时的最大查询数

Max_connections_per_hour count:每小时的最大连接数

Max_updates_per_hour count:每小时的最大更新数

Max_user_connection count:单个用户可以同时有count个连接

3) 查看用户权限

A)查看指定用户权限

Select  host  , user , password , select_priv , update_priv , grant_priv , drop_priv  from  mysql.user  where  user=’user_name’

B)查看所有用户的权限

Show  grants  from  ‘user_name’ ;

5.收回权限

1) 收回所有权限

Revoke  all  privileges , grant  option  from  user_name [ identified  by  password ]

2) 收回权限

Revoke  priv_type  [( column_list )]  on  database.table_name  from  user_name  [ identified  by  password  ]

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值