zoukankan      html  css  js  c++  java
  • MySQL数据库

    常见的DBMS介绍

    ​ 1.MySQL:Oracle公司的产品,MySQL在08年被Sun公司收购,09年Sun公司被

    Oracle公司收购,开源软件。被收购后MySQL创始人从Oracle离开创建了MariaDB,

    MariaDB就是MySQL软件的一个分支,市占率第一。

    ​ 2.Oracle:Oracle公司产品,性能最高价格最贵,不是开源的,市占率第二。

    ​ 3.SQLServer:微软公司产品, .net语言使用此数据库,市占率第三。

    ​ 4.DB2:IBM公司产品

    ​ 5.SQLite:轻量级数据库软件,安装包几十k,主要用于移动设备和嵌入式设备中

    常见的MySQL命令

    一丶常见的数据库命令

    1.查询所有数据库:

    show databases;
    

    2.创建数据库

    *创建数据库:
    	create database 数据库名;
    *创建数据库,判断不存在时在创建
    	create database if not exists 数据库名;
    *创建数据库,判断不存在是在创建,且指定字符集
    	create database if not exists 数据库名 character set 字符集;
    

    3.使用数据库

    use 数据库名;
    

    4.查询数据库详情

    show create database 数据库名;
    

    5.删除数据库

    drop database 数据库名;
    

    6.修改数据库字符集

    alter database 数据库名 character set 字符集名称;
    

    7.查询当前正在使用的数据库

    select database();
    

    二丶表相关的SQL语句

    1.创建表

    create table 表名(字段1 类型,字段2 类型,...);
    create table 表名(字段1 类型,字段2 类型,...) charset=utf8;
    例如:
    create table person(name varchar(5),age int);
    create table student(name varchar(10),score int) charset=utf8;
    create table hero(name varchar(10),money int) charset=default;
    

    2.查询表

    *查询所有表
    	show tables;
    *查询表的详情
    	show create table 表名;
    *查询表字段
    	desc 表名;
    

    3.删除表

    drop table 表名;
    

    4.修改表

    *修改表名
    	rename table 表名 to 新表名;
    	例如:
    	rename table person to t_person;
    *添加表字段
    	*添加到表字段的最后面
            alter table 表名 add 字段名 类型;
            例如:
            alter table student add gender varchar(5);
        *添加到表字段的最前面
            alter table 表名 add 字段名 类型 first;
            例如:
            alter table student add id int first;
        *添加到某个字段的后面
        	alter table 表名 add 新字段名 类型 after 字段名;
            例如:
            alter table student add money int after name;
    *删除表字段
    	alter table 表名 drop 字段名;
    	例如:
    	alter table student drop money;
    *修改表字段
    	alter table 表名 change 原字段名 新字段名 新类型;
    	例如:
    	alter table student change gender money int;
    

    二丶DML数据操作语言

    1.DML数据操作语言:执行操作数据库的SQL必须保证已经使用了某个数据库,并且存在数据所对应的表

    2.插入数据(增)

    *全表插入格式(要求值的数量和顺序和表字段保持一致)
    	insert into 表名 values(值1,值2,值3,...);
    	例如:
    	insert into person values('tom',18);
    *指定字段插入格式(要求值的数量与顺序和指定的一值)
    	insert into 表名(字段名1,字段名2) values(值1,值2);
    	例如:
    	insert into person(name) values('Jerry');
    *批量插入
    	insert into 表名 values(值1,值2),(值1,值2);
    	insert into 表名(字段名) values(值1),(值1);
    	例如:
    	insert into person values('Lucy',20),('Lily',21);
    	insert into person(name) values("Lilei"),('Hanmeimei');
    *插入中文
    	insert into person values('刘德华',50);
    	如果执行上面SQL语句出现错误,提示中包含16进制内容,执行以下SQL
    	set names gbk;
    	
    

    3.查询数据

    select 字段信息 from 表名 where 条件;
    例如:
        select name from person;//查询所有name信息
        select name,age from person where age>20;//查询age大于20的所有name
        select * from person;//查询所有表内容信息
    

    4.修改数据

    update 表名 set 字段名=xxx,字段名=xxx where 条件;
    例如:
    	update person set age=8 where name ='Tom';
    	update person set age=10 where age is null;//如果age为null的情况下,把age改为10
    

    5.删除数据

    delete from 表名 where 条件;//如果不写where后面条件,则把表的全部内容删除
    例如:
    	delete from person where age=10;//删除age等于10的
    	delete from person where name='刘德华';//删除表中name为刘德华的数据
    	delete from person where age<20;//删除表中age小于20的数据
    	delete from person;//删除表中全部内容
    *如果要删除所有记录:
    	delete from 表名;//不推荐使用,有多少条记录就会执行多少次删除操作
    	truncate table 表名;//推荐使用,效率更高,先删除表,在创建一张一模一样的空表
    

    三 数据类型

    1.整数类型:

    ​ * int(m)和bigint(m)等效java中的long, m代表显示长度,位数不够,前面补0.

    create table t1(name varchar(10),age int(10) zerofill);
    insert into t1 values('aaa',18);
    select * from t1; //name='aaa' age=0000000018
    

    2.浮点数:

    ​ * double(m,d) : m代表总长度,d代表小数长度 53.234 double(5,3),超高精度浮点数 decimal(m,d)精度远远高于double,只有涉及超高精度时使用.

    3.字符串:

    ​ * char(m):固定长度,m=10 存abc 占10,优点:执行效率略高,最大长度255

    ​ * varchar(m):可变长度,m=10,存abc,占3, 优点:更节省空间,最大长度65535,但建议存255以下

    ​ * text(m):可变长度,最大长度65535,建议保存长大于255的。

    4.日期:

    ​ * date: 只能保存年 月 日

    ​ * time: 只能保存时 分 秒

    ​ * datetime: 默认值为null,最大值9999-12-31

    ​ * timestamp: (时间戳:距1970年1月1号的毫秒数): 默认值为当前系统时间最大值2038-1-19

    ​ 例如:

    create table t_date(t1 date,t2 time,t3 datetime,t4 timestamp);
    insert into t_date values(null,null,'2020-6-12 16:19:20',null);
    insert into t_date values('2018-10-12','15:30:20',null,null);
    

    四、SQL练习

    导入emp.sql 命令行界面: source C:UsersAdministratorDesktopempemp.sql;

    1.emp表

    2.dept表

    1.去重distinct

    select distinct 字段名 from 表名;
    

    (1).查询员工表中有哪些工作(去重)

    select distinct job from emp;
    

    (2).查询员工表中的部门编号deptno有哪些

    select distinct deptno from emp;
    

    2.is null和is not null

    (1).查询没有上级领导的员工信息

    select * from emp where mgr is null;
    

    (2).查询有上级领导的员工姓名,工资和工作

    select ename,sal,job from emp where mgr is not null;
    

    3.比较运算符 > < >= <= = != 和<>(相当于不等于)

    (1) 查询工资小于等于3000的员工姓名和工资

    select ename,sal from emp where sal<=3000;
    

    (2)查询不是程序员的员工姓名和工作(两种写法)

    select ename,job from emp where job!='程序员';
    select ename,job from emp where job<>'程序员';
    

    4.and和or

    (1)and类似于java中的&& ,当需要同时满足多个条件的时候使用

    (2)or类似于java总的|| ,当多个条件满足一个就行的时候使用

    ​ *查询1号部门工资大于2000的员工信息

    select * from emp where deptno=1 and sal>2000;
    

    ​ *查询工作是人事或者工资大于3000的员工姓名,工作,工资

    select ename,job,sal from emp where job='人事' or sal>3000;
    

    5.in

    (1)当查询某个字段的值为多个值的时候使用

    ​ *查询工资为3000/1500/5000的员工信息

    select * from emp where sal in(3000,1500,5000);
    

    6.between x and y (包含x和y)

    (1) 当查询某个字段的值在某两个值之间的时候使用

    ​ * 查询工资在1000-2000之间的员工姓名和工资

    select ename,sal from emp where sal between 1000 and 2000;
    

    7.综合练习

    *查询有上级领导并且是3号部门的员工信息
    	select * from emp where mgr is not null and deptno=3;
    *查询2号部门工资在1000到2000之间的员工姓名,工资和部门编号
       select ename,sal,deptno from emp where deptno=2 and sal between 1000 and 2000;
    *查询1号部门工资为800和1600的员工信息
        select * from emp where deptno=1 and sal in(800,1600);
    *查询1号和2号部门工资高于2000的员工信息
        select * from emp where deptno in(1,2) and sal>2000;
    *查询员工表中出现的部门编号有哪几个
        select distinct deptno from emp;
    
  • 相关阅读:
    Week7 作业 A
    Mouth 1 模拟题 CSP201512-3 画图
    C++出现:error: passing 'const Employee' as 'this' argument of 'int Employee::getSalary()' discards qualifiers [-fpermissive]
    C++出现error: no match for call to '(MyCompare) (const key_type&, const Person&)'
    CentOS 7出现ifconfig:command not found
    有效清理C盘内存
    重装系统之后出现https:/ / logincdn.msauth.net/shared/1.0/content/js/ConvergedLogin_PCore_xxvbETmiVPe1AsI9xwHp3A2.js
    C++/QT运行时出现void value not ignored as it ought to be
    运行QT项目文件夹下的exe文件提示找不到“各种dll”
    Ubuntu16.04配置OpenCV3.2.0
  • 原文地址:https://www.cnblogs.com/enterty/p/13109738.html
Copyright © 2011-2022 走看看