数据库常见操作

来源:互联网 发布:linux创建json文件 编辑:程序博客网 时间:2024/06/04 17:52

黑马训练营


一. 对数据库的操作

创建数据库用户 在实际开发中 绝对不能使用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 文件位置; //有图形化界面可以直接拖入
0 0