• Day 43数据库(Day1)


    创建表.

    create table student(
        id int not null auto_increment PRIMARY key,
        name archar(250) not null, 
        age int not null,  
        sex enum("","") not null default"",
        salary double(10,2) not null 
    
    )ENGINE = INNODB default charset =utf8;

    数据库 

    在cmd命令下

    C:Usersipc>mysql -uroot -p
    Enter password: ******

    二、创建一个数据库  

    create database db1 

     三 、查看database

    show DATABASES

    查看数据库

     desc  t1

     

    查看数据库 

    show create TABLE t1

    * select * from t1; -- 查询表中数据 
    desc t1; -- 查看表结构

    show create table t1; -- 显示表的创建信息

    以上三个命令查看

    删除数据库 

     drop database db2

    复制表 

    create TABLE t2 SELECT * from t1

    只是简单复制表,不会复制key值等等.

    create table t2 select * from t1; -- 复制表结构和表数据
    * create table t3 LIKE t1; -- 只复制表结构

    修改表

    ALTER TABLE t1 add id int not null PRIMARY key ; -- 添加字段

    ALTER TABLE t1 MODIFY salary double(10,3) not null DEFAULT 10; -- 修改字段类型与约束条件

    ALTER TABLE t1 CHANGE salary sal double(10,3) not null DEFAULT 10; --修改字段名称和类型与约束条件

    ALTER TABLE t1 DROP COLUMN sal; -- 删除指定字段

    RENAME table t1 to t5;-- 改变表名称

    重命名 表单 

    创建一个表格 

    create table t1(
    	name varchar(50) not null, 
    	age int(10) null,
    	salary DOUBLE(5,2)
    );
    

    数据操作 

    在栏位里面的操作都可以在sql预览里看到.

    修改数据操作

    1.增
    INSERT into t2(name,age) VALUES('小三',11); -- 指定字段插入

    INSERT into t2 VALUES('凤',13,2.5); -- 整表字段插入

    INSERT into t2 VALUES('凤',13,2.5),('凤',13,2.5),('凤',13,2.5),('凤',13,2.5),('凤',13,2.5);--插入多条

    insert into t1 SELECT id,name from t2; -- 复制表数据

    insert   into t2(name,age) values('xiaosan',11)

    2. 删 (就下面一个用法)

    delete  from t2 where age =11 

    删除表内的 age =1 的行.

    3.改  (就update 一种用法)

    update t2 set name ='111' , salary = 1 where age =11;更改name =111的名字的 salary 为 1 和age =11 。

    update t2 set name ='111'  千万不要执行此命令,会把表内所有的name改成111 ,salary 改为1 。 

    4.查

    创建表格 

    -- 创建表
    DROP TABLE IF EXISTS `person`;
    CREATE TABLE `person` (
      `id` int(11) NOT NULL AUTO_INCREMENT,
      `name` varchar(50) NOT NULL,
      `age` tinyint(4) DEFAULT '0',
      `sex` enum('男','女','人妖') NOT NULL DEFAULT '人妖',
      `salary` decimal(10,2) NOT NULL DEFAULT '250.00',
      `hire_date` date NOT NULL,
      `dept_id` int(11) DEFAULT NULL,
      PRIMARY KEY (`id`)
    ) ENGINE=InnoDB AUTO_INCREMENT=13 DEFAULT CHARSET=utf8;
    
    -- 创建数据
    
    -- 教学部
    INSERT INTO `person` VALUES ('1', 'alex', '28', '人妖', '53000.00', '2010-06-21', '1');
    INSERT INTO `person` VALUES ('2', 'wupeiqi', '23', '男', '8000.00', '2011-02-21', '1');
    INSERT INTO `person` VALUES ('3', 'egon', '30', '男', '6500.00', '2015-06-21', '1');
    INSERT INTO `person` VALUES ('4', 'jingnvshen', '18', '女', '6680.00', '2014-06-21', '1');
    
    -- 销售部
    INSERT INTO `person` VALUES ('5', '歪歪', '20', '女', '3000.00', '2015-02-21', '2');
    INSERT INTO `person` VALUES ('6', '星星', '20', '女', '2000.00', '2018-01-30', '2');
    INSERT INTO `person` VALUES ('7', '格格', '20', '女', '2000.00', '2018-02-27', '2');
    INSERT INTO `person` VALUES ('8', '周周', '20', '女', '2000.00', '2015-06-21', '2');
    
    -- 市场部
    INSERT INTO `person` VALUES ('9', '月月', '21', '女', '4000.00', '2014-07-21', '3');
    INSERT INTO `person` VALUES ('10', '安琪', '22', '女', '4000.00', '2015-07-15', '3');
    
    -- 人事部
    INSERT INTO `person` VALUES ('11', '周明月', '17', '女', '5000.00', '2014-06-21', '4');
    -- 鼓励部
    INSERT INTO `person` VALUES ('12', '苍老师', '33', '女', '1000000.00', '2018-02-21', null);
    

    1 . 简单查询 

    select * from person 

    查询所有

    select name,age from person;   

    查询到name 和age 两个列

    select p.name ,p.salary , p.salary+p.salary*0.1 from person as p

    -- 别名+字段运算

    select DISTINCT salary,name from person;
    --去除两个都相同的字段

    2.条件查询

    -- 逻辑运算符 < > <= >= != <> =
    -- is null ,is not null
    -- and OR ()

    select *from person where age > 30
    select *from person where age < 30

    select * from person where age between  20 and 30 

    select * from person where dept_id is null;


    select * from person where dept_id = null; 语法错误.

    select * from person where salary> 5000 and age <=30

    3.区间查询

    SELECT * FROM person where salary >=5000 and salary<=10000;
    -- 推荐使用 :
    --ps:前后包含
    SELECT * FROM person where salary between 5000 and 10000;

    4. 集合查询(in not in )

    select * from person where age =20 or age =23 or age =30

    select * from person where age not in (20,30,23)

    5. 模糊查询 like 

    select * from person where name like '月%'  -----以月开头.

    select * from person where name like '%月'  ----以月结尾

    SELECT * FROM person where name LIKE '%月%'; -- 包含

    SELECT * FROM person where name LIKE '_l%'; -- "_"表示占位符

    6. 排序

    select * from person order by salary asc ,age desc ;
    先以第一个salary 条件为主,如果第一个salary 相等, 以age进行排序.

    select * from person order by convert(name using gbk )---中文排序, 也包括英文.

    7.聚合函数

    select MAX(salary) from person;

    select MIN(salary) from person;


    select AVG(salary) from person;
    select SUM(salary) from person;


    select COUNT(*) from person;

    8.分组查询group by  , having 

     select * from person group by dept_id;

    having 和where 的意思是一样的 ,where 的优先级比groupby 高 

     

    where 与 having区别:
    #执行优先级从高到低:where > group by > having
    #1. Where 发生在分组group by之前,因而Where中可以有任意字段,但是绝对不能使用聚合函数。
    #2. Having发生在分组group by之后,因而Having中可以使用分组的字段,无法直接取到其他字段

    select count(id),name,dept_id from person group by dept_id;

    select count(id),dept_id,avg(salary) from person GROUP BY dept_id HAVING avg(salary)  >=5000 ;

    9.分页查询 limite

    SELECT * FROM person LIMIT 1,4 # 1 表示从第二个开始 ,一个显示五行

     

    10 正则表达式.

     

    SELECT * FROM person where name REGEXP '^a';

    SELECT * FROM person where name REGEXP 'n$';

    SELECT * FROM person where name REGEXP '[a,e,n]';  

     

    SELECT * FROM person where name REGEXP '[^alex]';  ##所有非alex的

     

      SELECT * FROM person where name REGEXP '^w.*i$';

    11. SQL 语句关键字的执行顺序

    执行顺序: FROM -> WHERE -> GROUP BY -> HAVING -> SELECT -> ORDER BY ->limit  

    权限

    create user 'alex'@'127.0.0.1' IDENTIFIED by '123'; -- 创建用户

    grant SELECT,UPDATE,DELETE ON db1.* to 'alex'@'127.0.0.1';

    GRANT all PRIVILEGES ON db1.* to 'alex'@'127.0.0.1'; -- 所有权限

    FLUSH PRIVILEGES; -- 刷新权限

    update mysql.user set password=password('123456') where user='root';

     1. 创建用户

    create user 'alex'@'127.0.0.1' IDENTIFIED by '123'

    2. 为用户授予权限

    grant SELECT,UPDATE,DELETE ON db1.* to 'alex'@'127.0.0.1';

    3. 授予所有权限

     GRANT all PRIVILEGES ON db1.* to 'alex'@'127.0.0.1'

    4. 权限刷新

    flush PRIVILEGES

    5 更改密码

    cmd命令下 >mysqladmin -uroot -p123 password 1234567

    123 是之前密码,1234567 是新密码 

    登录账户 在cmd 命令下   :

    #mysql -uroot -p  命令.

    6. 忘记密码操作.

    1 . cmd 命令关闭mysql服务:

    net stop  mysql56

     2 . 跳过mysql 服务

     mysqld  --skip-grant-tables

     3. 重新打开一个窗口cmd 直接输入 mysql ,直接就进来了。

    cmd #mysql 

    4.重新修改密码 

    update mysql.user set password=password('123') where user= 'root';   ---这是5.6 的版本用法  

    update mysql.user set authentication_string=password('新密码'where user'用户名'       ---这是5.7版本的用法.    

    5.刷新一下 

    flush privileges

    6.重启下mysql (先把mysqld程序关掉)

    net start mysql56

     

    查看下密码库

    中文乱码问题

    1. 查询字符编码 

    show VARIABLES like 'char%'

    2.制服乱码

    #修改方法:
    #1. 创建my.ini文件,放在mysql根路径下
    #2. 在该文件中添加以下内容即可:
    #3.添加此文件后需要重新启动服务,以保证此文件生效
    ------------------------------------------------------------
    [client]
    
    default-character-set=utf8
    
    [mysql]
    
    #设置mysql客户端默认字符集
    
    default-character-set=utf8
    
    [mysqld]
    
    #设置3306端口
    
    port = 3306
    
    #允许最大连接数
    
    max_connections=200
    
    #服务端使用的字符集默认为8比特编码的latin1字符集
    
    character-set-server=utf8
    
    #创建新表时将使用的默认存储引擎
    
    default-storage-engine=INNODB
    
    #解决mysql在执行sql语句后出现1055错误,sql_mode = only_full_group_by不相容
    
    sql_mode='NO_ENGINE_SUBSTITUTION'
    
    乱码已死

     注意:如果使用的是mysql5.7版本,则需要创建my.ini文件,5.7版本以前数据库自带my,ini文件,直接改动编码即可.

     目前最稳定与常用的数据库版本为(5.6版本与5.5版本)

  • 相关阅读:
    PIL PNG格式通道问题的解决方法
    opencv-python 学习初探2 去图片水印
    Appium、selenium与Robot Framework
    性能监控0
    XML
    Python3 读取和写入excel
    Python识别字符型图片验证码
    python进程、线程、协程
    算法和程序
    Zigbee
  • 原文地址:https://www.cnblogs.com/mengbin0546/p/8710174.html
Copyright © 2020-2023  润新知