数据库常见操作

黑马训练营


一. 对数据库的操作

创建数据库用户 在实际开发中 绝对不能使用root数据库
    create user '用户名' identified by '密码';
为用户授权
    grant all on 数据库名1.* to '用户';   //将数据库1灵力的所有权限赋给用户
登录:
    mysql -uroot -p密码
    mysql -uroot -p 回车输入密码
    mysql -uroot -p密码 -hIP地址
修改密码:
    第一步 use mysql;
    第二步 update user set password=password('1234') where user='root';
服务启动:
    net start mysql;
服务关闭:
    net stop mysql;
显示当前数据库服务器中的数据列表:
    show databases;
显示数据库中的数据表:
    show tables;
显示当前数据库的状态
    status;
显示当前数据库中某表的表结构:
    desc 表名称;
显示当前使用的数据库名称:
    select database();
显示所支持的字符集:
    show character set;
查看创建表,sql语句:
    show create table 表名;

二、DDL数据库定义语言

创建数据库:
    create database [if not exists] 数据库名称 [character set 字符集][collate 比较依据]
    eg: create database day13 charcater set utf8 collate utf8_general_ci;
查询数据库创建语句:
    show create database 数据库名称;
删除数据库:
    drop database[if exists] 数据库名称;
修改数据:
    alter database 数据名 character set 字符集 collate 比较方式;


表定义语句:
    创建表:
        create table 表名(字段名称 字段类型[字段约束],字段名称 字段类型[字段约束],...);   
    删除表:
        drop table 表名;

对表结构进行修改:
    修改字段类型:
        alter table 表名 modify 字段名称 新类型;
        eg:alter table user modify username varchar(100);
    修改字段名称:alter table 表名 change 老字段 新字段名称 新字段类型;
        eg:alter table user change username age int;
    添加字段:
        alter table 表名 add column 字段名称 字段类型;
        eg: alter table user add column class varchar(10);
    删除字段:
        alter table 表名 drop[column] 字段名称;
    重命名:
        alter table 表名 rename [to] 新表名;

三、 DML数据操作语言(对数据库中表进行增、删、改操作)

插入数据:
    insert into 表名(字段列表) values(字段对应值);
更新数据:
    update 表名 set 字段名=字段值,字段名=字段值,....;
    update 表名 set 字段名=字段值,字段名=字段值,.... where 条件;
删除数据:
    delete from 表名[where 条件];    
    **不写条件删除所有

四、 约束

约束:给字段添加规则,约定内容编写。最终保证数据的完整性、一致性等。
  • 主键约束:

    关键字 primary key   
    一个表中唯一表示,可以是一个字段,也可以是多个字段
    1. 定义表,声明字段,定义主键
    eg;create table pk01(id int primary key,name varchar(32));
        特点:primary key 只能修饰一个字段
    2. 定义表,声明字段后在约束区域定义主键。
    eg: cterte table pk02(id int,name varchar(32),constraint primary key(id));
        特点: constraint primary key (字段1,字段2,....) 可以设置多个字段
    3. 定义表,声明字段,表创建之后。修改表结构添加约束。
    eg:create table pk03(id int,name varchar(32));alter table pk03 add constraint primary key(id);
    

    特点:也可以设置多个字段更加灵活。
    **推荐方式3

  • 唯一约束:

    关键字 unique          被修饰的字段不能重复
    1. 定义表,声明字段,声明唯一约束。  
    eg:create table un01(id int unique,name varchar(32));
        特点:unique只能修饰一个字段
    2. 定义表,声明字段之后,在约束区域定义唯一约束。
    eg:create table un02(id int,name varchar(32),constraint unique(id));
        特点:unique可以修饰多个字段
    3. 定义表,声明字段,表创建之后,修改表结构添加唯一约束。
    eg:create table un03(id int,name varchar(32));alter table un03 add constraint unique(id);
        ########注意 唯一不对null起作用    即:id 可以多次为null。
    
  • 非空约束

    关键字 not null        被修饰字段不能为null
    定义:在定义表,字段声明时,添加约束
        create table nn01(id varchar(32),content varchar(50) not null); 
        insert into nn01(id) values('u001'); ## 出错
        不想出错可以定义默认值:
        create table nn02( id varchar(32),content varchar(50) not null default 'dzd');
        insert into nn01(id) values('u001'); ## 不出错
    主键 =唯一 +非空
    
  • 自动增长列

    关键字 auto_increment  
    mysql特有    被修饰后将自动累加   
    ps:oracle 没有自动增长列,但提供了序列sequence
     create table ai03(id int primary key auto_increment,content varchar(50),);
    *******注意:1. 字段必须是整形,一般使用int  
             2. 必须是key(主键、唯一),一般使用主键primary key
             3. 被auto_increment修饰的字段,不需要手动维护数据,mysql将自动维护
    
  • 删除约束

    删除主键:
        alert table 表名 drop primary key;
    删除唯一:
        可以通过修改列实现
    删除外键:
        alert table 表名 drop foreign key名称;
    

    cmd命令中文数据处理
    set names gbk;

五、 DQL数据库查询语言

  • 无条件查询

    查询所有
        select * from 表名;
    查询部分
        select 字段名、字段名、... from 表名;  ##查询所有也可以使用这种方式  效率比*高     
    别名:
        字段[as] 别名
        eg:mysql> select id,concat(firstname,secondname) as 姓名 ,count -60 及格 from users;
        ``重音符可以解决特殊符号,关键字等
        eg: mysql> select id,concat(firstname,secondname) as `姓  名` ,count -60 及格 from users; 
        *姓名如果没用``修饰 中间有空格 报错 
    
  • 带条件查询

    格式:
        select 字段名称,字段名称,... from 表名 where 条件1 [or 条件2 and 条件3 .......];
        运算符 优先级  and 优先 or
    
  • 模糊查询:

     不完全匹配、like语句
    格式:select 字段名称,字段名称,... from 表名 where 字段 like 模糊查询表达式;
    模糊查询表达式;
        % 匹配多个字符
            '云'   只能匹配一个云
            '%云'  以云结尾
            '云%'  以云开头
            '%云%' 包含云   ****重要
        _ 匹配一个数据
            '_云'    匹配  赵云   马云  这些
            '__长'   匹配  关云长 
    
  • 查询某一个条件为空的数据

    select 字段名称,字段名称,... from 表名 where 字段名 is null;
    
  • 查询某一个条件不为空的数据

    select 字段名称,字段名称,... from 表名 where 字段名 is not null;
    
  • 聚合函数:

      对表中数据进行统计,显示一个数据(一行一列的数据)
    ## 注意 聚合函数不统计 null值
    统计有所少记录     关键字  count
        select count(*|字段);
        eg:select count(id) from users; #7
        eg:select count(count) from users;#6    有null值
    平均值         关键字   avg
        select avg(age) from user;   ##不精准  有可能null值
        select sun(age)/count(id) from user;      id不为空,且唯一
    最大值         关键字   max
        select max(age) from user;
    最小值         关键字   min
        select min(age) from user;
    计算和         关键字    sum
        select sum(age) from user;
    去除重复        关键字   distinct
    排序  select ... order by 字段1 关键字,字段2 关键字,...;
        关键字  asc 升序,desc降序    默认 asc
        eg:select distinct age from users order by age desc;   # age asc 等效 age [asc] 
    
  • 分组

    关键字 group by 
    格式:select ... group by 分组字段;
    eg:select classes,sum(count)/count(id) from users group by classes;
    
  • 多表操作:

    select ... from 表A,表B where  条件1 [or 条件2 and 条件3 .......];
    表的别名:
        select ... from 表名 [as] 别名
    子查询      一条select语句,作为另一个select一部分。
        eg:select * from users,(
            select classes,sum(count)/count(id) as cavg from users group by classes) as B 
            where users.classes = B.classes and cavg < 60;
        子一列,查询特点:
            查询结果一行,可以使用 select id,(xxx) from
            查询结果一行多列(查询多个值),可以使用关键字 in ,all等
            eg: xxx in (...)  xxx > all(xxx);
            查询结果多行多列,可以当做另一个表使用。
    

六、 多表操作 ———–表与表之间的关系

  • 一对一 :

    方法1: ***推荐方式
    1. 创建主表,确定主表的主键
    2. 穿件从表,给从表添加外键字段
    3. 使用主外键关系描述 一对多
    create table user(id int primary key,#必须要有主键 
              username varchar(50),password varchar(32));
    create table order(id varchar(32),price double(5,2),user_id int #必须与主表主键类型一致
              );
    使用主外键关系,从表外键与主表主键形成 主外键关系
    格式: alter table 从表表名 add [constraint] foreign key (从表外键) references 主表表名(主表主键);
    alter table order add constraint foreign key (user_id) references user (id);
    
    方法:
    1. 创建主键,添加主键
    2. 创建从表,创建时添加外键约束。
    create table t_user2(
      id varchar(32) primary key,  #必须要有主键
      username varchar(50),
      password varchar(32)
    );
    create table t_order2(
      id varchar(32),
      price double(5,2),
      user_id varchar(32),   # 必须与主表主键类型一致
      constraint foreign key (user_id) references t_user2 (id)
    );
    
    注意:
        外键可以为null
        从表外键不能引用主表主键不存在的内容
        外键如果引用了,主表数据内容不能删除
    
  • 2 多对多

    # 创建第一个主表,确定主键
    # 创建第二个主表,确定主键
    # 创建中间表,添加两个外键,
    # 使用主外键关系进行描述(需要描述两次)
    create table t_student(
      id varchar(32) primary key,
      name varchar(50)
    );
    create table t_course(
      id varchar(32) primary key,
      content varchar(50),
      teacher varchar(32)
    );
    
    create table t_student_course(
      student_id varchar(32),   #t_student 对应外键,注意类型
      course_id varchar(32)     #t_course 对应外键
    );
    #### 主外键关系
    ####中间表 与  学生表
    alter table t_student_course add constraint student_fk foreign key(student_id ) references t_student(id);
    ####中间表 与 课程表
    alter table t_student_course add constraint course_fk foreign key(course_id) references t_course(id);
    
    ### 联合主键
    alter table t_student_course add constraint primary key(student_id,course_id);
    
    ###删除外键
    #alter table `day14`.`t_student_course` drop foreign key `student_fk`
    #alter table `day14`.`t_student_course` drop foreign key `course_fk`
    
  • 连接查询(多表操作)

    笛卡尔积:两个表的成绩
    
    隐式内连接   多表操作时,通过where确定连接   92规范
    eg: select * from t_user ,t_order where t_user.id = t_order.user_id;
    内连接  99规范
    格式:
        select * from A inner join B on 连接条件 
    
    外链接
        左外连接 查询A表所有内容,B表内容是否显示,取决条件是否成立。
             如果成立将显示,如果不成立显示null
        格式:select ... from A left outer join B on 条件
    
        右外连接,查询B表所有内容,A表中内容是否显示,取决条件是否成立。如果成立将显示,如果不成立显示null
        格式:select ... from A right outer join B on 条件
    

七、 补充

把一个数据库中的表复制到另一个表
    create table 表名1 select * from 数据库名.表名2 (where  1=2 ); 
                    ** 注意: 如果不写 where 1=2 会将原来表2的所有内容都复制到表1 如果写上 只复制表结构 不复制表里的数据

分页查找
    select * from 表名 limit 开始索引,分页个数

读锁:共享锁
select .... from ... lock in share model;
写锁:排它锁,只能一个进行写,不能有其他锁(写锁、读锁) 所有的更新操作都将自动获得写锁
select ... from for update;


执行.sql文件:
source 文件位置; //有图形化界面可以直接拖入
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值