java学习day21~23--MySQL(上)

关于SQL  结构化查询语言  structured query language

sql语句对于不同的数据库有微小差异

数据语言

    1.DDL  数据定义语言
        create  创建表,视图,索引...
        drop   删除表,视图,索引...
        alter   修改表
    2.DML  数据操控语言
        insert   插入数据
        update   修改数据
        delete  删除数据
        select  查询数据
    3.DCL  数据控制语言(数据的权限控制)
        grant   授权
        revoke   回收权限
    4.TCL   事物控制语言
        start transaction  开始事物(begin)
        commit   提交
        rollback   
注意:
    数据库不严格区分大小写
    数据库中的字符串是单引号
    varchar是可变字符

creat database 数据库名;  --->创建一个库
use 数据库名;    --->使用数据库 / 切换到某个库
show tables;   --->显示所有表
create table 表名 (
    列名1  类型    约束,
    列名2    类型    约束,
    ...
);    --->创建具体表

desc 表名;   --->查看表的结构
insert into 表名(列1, 列2,...,列n)  values (值1, 值2, ..., 值n);    --->插入数据
select 内容 from 表名;    查询表中的具体属性
select * from 表名;  查询表中
drop  table 表名    --->删除表,里面的数据也被删除

约束:可以写在类型后面,也可以单独一行,将要约束的值作为参数传入
unique   唯一约束,取值必须唯一
primary key    主键约束
foreign key   外键约束,必须单起一行   reference 
not  null   非空约束
primery key(x,y)     复合主键
check   (mysql不支持)

eg:
学生表  student
编号 int  sid
姓名 varchar sname
生日 date   birthday
性别 char   sex

-- 把约束加在类型之后
create table student(
  sid int unique,
  sname varchar(20),
  birthday date,
  sex char(1)
);
-- 把约束单独一行
create table student(
  sid int not null,
  sname varchar(20) not null,
  birthday date,
  sex char(1),
  unique(sid)
);
--外键约束,student里面的id必须符合class中的id的值
create table student(
  sid int primary key,
  sname varchar(20) not null,
  birthday date,
  sex char(1),
  cid int,
  foreign key(cid) references class(cid) /* student中的cid取值必须引用class中的cid的值 */
);


数据类型
    整数类型
        int  四个字节
        tinyint 一个字节
        smallint  两个字节
        bigint  八个字节
    小数类型
        float   四个字节
        double  八个字节

    定点类型:decimal 小数部分不会丢失精度,但是占用内存高
        decimal(10,2)  所有位数不超过10,小数部分不超过2,超过范围会丢失数据
        decimal(10, 2)
            12345678.77  ok
            123456789.44  存不下
            12345678.456  小数部分变为46
    字符串类型
        char(最大长度)   定长的字符类型   用空格补齐不足的部分,再查询时会去掉,效率高,但占用空间高
        varchar(变长的字符类型)    不用空格补齐,内存较优,但效率较低
    日期类型
        datetime   包括年月日,时分秒,范围大(公元1000--9999)
        date  只包括年月日
        time 只包括时分秒
        timestamp  也可以包括年月日时分秒,范围小(1970--2038)

扫描二维码关注公众号,回复: 3638280 查看本文章

        now()  获取当前时间
        values('时间');      给定一个特定的时间,注意格式和合理性

    ? 数据类型   回车   --->会提示输入的数据类型的范围

自增列(主要用于在给主键产生一个唯一值)
auto_increment    产生一个自动增长的值,初值给null,自动增1
        使用了自增长,就不要手动赋值了,否则会使用手动赋的值
        也可以选择不从1开始赋值,即指定初始值

指定默认值   default '指定值' 
default  current_timestamp    插入数据时,采用当前时间作为默认值
on update current_timestamp 修改数据时,采用修改时间的时刻来更新这一列

修改   update
update 表名 set 列名 = 新值, 列二 = 值二...    修改表中所有的行
update 表名 set 列名=新值, 列二=值二... where 列名=条件;    -- 仅更新符合条件的记录
如果条件不满足去更新不会报错,但影响行数是0
更新多个列   ,用逗号隔开
注意:主键列主要用于查询,一般不会更新 
alter   修改
给老师添加一列年龄  alter table teacher add age tinyint;
给老师的姓名列扩展长度    alter table teacher modify tname varchar(30)

删除
delete from 表名;   删除表中所有记录,但表的定义不动
drop table 表名;   删除这个表连同里面的数据
delete from 表名 where 列名=条件;   仅删除符合条件的记录

主键所在表可以称为`主表`,而外界所在表称为`从表`
主表中删除的记录,如果被从表引用,那么会删除失败,违反外键约束(外键约束默认行为)。

外键约束还有一种行为,主表记录删除,把从表中与之关联的记录一块删除(级联删除)
以员工和部门为例:foreign key(deptno) references dept(deptno) on delete cascade
 例如: 删除10号部门,不仅会删除10号部门,而且会被从表(emp)中的10部门下所有员工也一块删除

查询: select
select 列名... from 表名 where 条件;

条件
1.比较运算
  表示相等的 =
  大于 >
  大于等于 >=
  小于  <
  小于等于 <=
  不等于 !=
  
2.逻辑运算 and(并且) or(或者) not(取反)
  
  -- 查询工资大于800 并且 部门等于20
  where sal>800 and deptno=20
  -- 部门=20 或者 等于30的
  where deptno=20 or deptno=30;
  
3. null值
数据库中的null ,比较特殊,不能使用=来比较, 必须用 is null
  例如:查询佣金为null的员工
  select * from emp where comm is null;
  例如:查询佣金不为null的员工
  select * from emp where comm is not null;

4. like (模糊查询)
   例如查询以 ‘S’字母打头的员工
   
select * from emp where ename like 'S%';

通配符 % 表示匹配0~多个任意的字符
通配符 _ 表示匹配一个任意字符

5. between ... and ... 范围匹配
求工资大于等于1000, 小于等于2000的员工
select * from emp where sal>=1000 and sal<=2000;

select * from emp where sal between 1000 and 2000;
1) 必须按有小到大顺序
2) between 包含等于条件

6. in 求这一列是否在一个值列表内
求所有销售人员和经理
select * from emp where job='SALESMAN' or job='MANAGER';

select * from emp where job in ('SALESMAN', 'MANAGER');

7. limit (mysql特有的)
用来限制返回的结果数
1) limit n;       n表示最多返回几条记录
2) limit m, n;    m代表偏移量(下标) 注意偏移量从0开始

8. order by 用来给结果排序
语法: order by 列名 asc|desc, 列名 asc|desc, ...
例如:按工资升序:
select * from emp order by sal;
select * from emp order by sal asc;
按工资降序:
select * from emp order by sal desc;
其中如果不写asc或desc,默认升序

如果多列排序,如果第一列取值相同,再按照第二列进行排序,例如:
先按工资排序,工资相同的,再按姓名排序:
select * from emp order by sal asc, ename asc; /*如果升序,两个asc都可以省略*/

9. select 语句的顺序:
select ... from 表 where 条件 order by 排序 limit 限制


导入数据
source 路径\sql文件的名称;
导出数据
mysqldump -u root -p test3 > a.sql    在cmd窗口运行


 

猜你喜欢

转载自blog.csdn.net/szy2333/article/details/82313545