基础的SQL语法详解

#查看表结果

desc t_stu

#查看表结构

show create table t_stu

#修改表名

alter table t_stu_detail rename t_detail

#删除表结果

drop table t_detail

#修改表结构

alter table 表名 add 列/约束/索引

alter table 表名 drop 列/约束/索引

alter table 表名 modify/change列定义(包括列约束)

#增加一列

alter table t_stu add age int(11) [after/first] sex

#删除列

alter table t_stu drop age

#修改列类型

alter table 表名 modify 【column】 列名 数据类型;

alter table 表名 modify 【column】 列名 数据类型 after 某一列;

alter table 表名 modify 【column】 列名 数据类型 first;

#修改列名等

alter table 表名 change 【column】 列名 新列名 数据类型;

#增加主键约束

alter table 表名称 add 【constraint 约束名】 primary key (字段名);

alter table 表名称 add 【constraint 约束名】 primary key (字段名1,字段名2);#复合主键

#增加唯一键约束

alter table表名称 add 【constraint 约束名】 unique 【key】 (字段名);

alter table表名称 add 【constraint 约束名】 unique 【key】 (字段名1,字段名2);

#增加外键约束

alter table表名称 add 【constraint 约束名】 foreign key (从表字段名) references 主表名(主表被参照字段名);

#增加/删除缺省约束或非空约束

alter table 表名 modify 【column】 列名 数据类型 【default 默认值】 【not null】;

#增加索引

create index index_name on table_name (column_name,[column_name…]);  最左边的列最关键

dml:数据操纵语言(dml)dml用于插入、修改、删除数据记录

drl:drl的查询语言是select语句,可以包含5种子句:

依次是where、 group by、having、 order by、limit

mysql的运算符

(1)算术运算符:+  –  *  /(除也可以写成p)   %(取模可以写成mod)

(2)比较运算符:=  >  >=  <  <=  !=(不等于还可以写成<>)

(3)逻辑运算符:&&(逻辑与也可以写成and) ||(逻辑或也可以写成or) not(逻辑非)

(4)范围:表达式 between … and … (也可以写成 表达式>=…  and 表达式 <=…)

            表达式 not between … and …(也可以写成 表达式<…  || 表达式 >…)

(5)集合:in (值,值,值…)  not in(值,值,值…)

(6)模糊查询:like  not  like,通配符:%表示0-n个字符,_下划线代表一个字符

(7)位运算符:&(按位与) |(按位或)  注意:极少用,可忽略

(8)null值判断,is null 或 is not null,如果使用null=null,null<>null,null=0,null<>0,null=false等都不对

dcl:dcl用来控制的访问

in:等于任何一个

  all:和子查询返回的所有值比较。例如:sal>all(1,2,3)等价于sal>1 && sal>2 && sal>3,即大于所有。

  any:和子查询返回的任意一个值比较。例如:sal>any(1,2,3)等价于sal>1 or sal>2 or sal>3,即大于任意一个就可以。

  exists:判断子查询是否有返回结果(不关心具体行数和内容),如果返回则为true,否则为false。

复制表(自学)

(1)拷贝表结构

create table newadmin like admin;

(2)拷贝表结构和数据(但约束与索引除外)

create table newadmin as   (   select *  from admin  )  ;

(3)拷贝表结构+数据

create table newadmin like admin;   

insert into newadmin select * from admin;

(4)跨数据库拷贝表

create table newadmin like shop.admin;   

create table newshop.newadmin like shop.admin;

(5)拷贝一个表中其中的一些字段(指定新名),其中一些数据

create table newadmin as   

(   

select id, username as uname, password as pass from admin  where id<10

)  ;

(6)在创建表的同时定义表中的字段信息。

create table tt

(

    eid int primary key auto_increment

)

as

(

    select employee_id as eid,first_name,last_name,email from employees

);

复制数据(自学)

在 insert 语句中加入子查询。

不必书写 values 子句。

子查询中的值列表应与 insert 子句中的列名对应。

insert into emp2

select * from employees where department_id = 90;

insert into sales_reps(id, name, salary, commission_pct)

select employee_id, last_name, salary, commission_pct

from   employees

where  job_id like ‘%rep%’;

数学函数

mod(x,y):返回x除以y以后的余数

sqrt(x)返回x的平方根

pow(x,y)、power(x,y)返回x的y次方

truncate(x,y)返回x保留到小数点后y位的值,之后舍去

round(x,y)保留x小数点后y位的值,单截取时要进行四舍五入

ceil(x)、ceiling(x)返回大于或等于x的最小整数

floor(x)返回小于或等于x的最大整数

字符串函数

char_length(s)返回字符串s的字符数

length(s)返回字符串s的长度,字节数

concat(s1,s2…)将字符串合并为一个字符串

concat_ws(x,s1,s2)将字符串合并为一个字符串,每个字符串之间要加x分隔

insert(s1,x,len,s2)用字符串s2替换s1的x位置开始长度为len的字符串

upper(s),ucaase(s)将字符串s的所有字母变成大写字母

lower(s)、lcase(s)将字符串s的所有字母变成小写字母

left(s,n)返回字符串s的前n个字符

right(s,n)回字符串s的后n个字符

lpad(s1,len,s2)字符串s2来填充s1的开始处,使字符串长度达到len

rpad(s1,len,s2)字符串s2来填充s1的结尾处,使字符串长度达到len

ltrim(s)去掉字符串s开始处的空格

rtrim(s)去掉字符串s结尾处的空格

trim(s)去掉字符串s开始和结尾处的空格

trim(s1 from s)去掉字符串s中开始处和结尾处的字符串s1

replace(s,s1,s2)将字符串s2替代字符串s中的字符串s1

substring(s,n,len)获取从字符串s中第n个位置开始长度为len的字符串

日期和时间函数

curdate(),current_date()返回当前日期

curtime(),current_time返回当前时间

now(),current_timestamp(),localtime(),sysdate(),localtimestamp()返回当前日期和时间

month(d)返回日期d中的月份值,1->12

monthname(d) 返回日期当中的月份名称,如janyary

dayofweek(d)日期d今天是星期几,1星期日,2星期一

dayname(d)返回日期d是星期几,如monday,tuesday

条件判断函数

if(expr,v1,v2)函数,如果表达式expr成立,返回结果v1;否则,返回结果v2。

ifnull(v1,v2)函数,如果v1的值不为null,则返回v1,否则返回v2

case

  when e1 then v1

  when e2 then v2

  …

  else vn

end

case表示函数开始,end表示函数结束。如果e1成立,则返回v1,如果e2成立,则返回v2,当全部不成立则返回vn,而当有一个成立之后,后面的就不执行了。

case expr

  when e1 then v1

  when e2 then v2

  …

  else vn

end

case表示函数开始,end表示函数结束。如果expr表达式的值为e1成立,则返回v1,如果为e2,则返回v2,当全部不成立则返回vn,而当有一个成立之后,后面的就不执行了。

经典问题:

1、在命令行出现乱码问题?

创建数据库时选择utf-8,但是windows窗口下是gbk,因此需要在命令行设置字符集 set names gbk;

是为了告诉服务器,客户端用的gbk编码,防止乱码

可以查看字符集

show variables like ‘character_set_%’;

2、退出当前错误语句?

语句打错以后退出本语句,再继续打新语句

也可以打\c,快捷退出本语句

3、如何数据库密码?安全模式登录

   1、通过任务管理器或服务管理,关掉musqlid(服务进程)

   2、通过命令行+特殊参数开启mysqlid

           mysqlid –skip-grant-tables

   3、此时,mysqlid服务进程已经打开,并且,不需要权限检查

   4、mysql -uroot 无密码登录服务器

   5、修改权限表

      a: use mysql;

            b: update user set password = password(‘123456’) where user = ‘root’;

      c: flush privileges;

    6:通过任务管理器,关掉mysqld服务进程.

  7:再次通过服务管理,打mysql服务。

  8:即可用修改后的新密码登陆.

1、既复制表结构也复制表内容的sql语句:create table tab_new as select * from tab_old;

2、只复制表结构不复制表内容的sql语句:create table tab_new as select * from tab_old where 1=2;

3、不复制表结构,只复制内容的sql语句:insert into tab_new select * from tab_old;或者select vale1, value2 into table2 from table1

(0)
上一篇 2022年3月21日
下一篇 2022年3月21日

相关推荐