zoukankan      html  css  js  c++  java
  • 2.MySQL基本操作-数据类型

    MySQL基本操作

    语义检查:判断SQL语句的类型

    • DDL:数据定义语言
    • DCL:数据控制语言
    • DML:数据操作语言
    • DQL:数据查询语言

    1.登陆退出MySQL数据库

    # (1) 登陆
        mysql -u用户名 -p -h ip地址
        root用户登陆 : 
            mysql -uroot -p
        select user() #查询当前登陆用户
        select now()  #查询时间
        
    # (2) 设置密码
        set password = "123"
        set password = "" 	--去除密码
            
    # (3) 退出
    q 或者 exit
    

    2.创建用户连接远程数据库

    远程数据库IP地址: 192.168.138.133
    # 给具体IP下设置一个账号,用来连接远程数据库
    """
    create user 用户名@"192.168.138.1"/"192.168.138.%"/"%" identified by "密码"
    
    用户名@'%'	所有地址
    用户名@'10.0.0.5%'	只允许IP地址末尾51~59的连接
    用户名@'localhost'	只允许本地连接
    """
    # 创建用户
    mysql>  create user lianxi@"192.168.138.1" identified by "111"
    # 查看所有用户
    mysql> select user,host from mysql.user;
    # 修改用户
    mysql> alter user lianxi@'localhost' identified by '123';
    # 删除用户
    mysql> drop user zhangkai@'localhost';
    
    
    # 连接远程数据库
        mysql -u lianxi -p -h 192.168.138.133
    
    # 查询当前用户有什么权限,for 后面怎么创建的怎么查询
        show grants for "lianxi"@"192.168.138.1"
    
    # 在远程数据库给用户添加执行权限
    """
    语法:   
        grant 权限 on 数据库名.表名 to "用户名"@"IP地址" identified by "密码"
        如果不更改密码,后面的 [ identified by "密码" ] 可不加
        "用户名"@"IP地址" : 
    常用权限:
        select 查询权限
        insert 添加权限
        update 修改权限
        drop 删除权限
        all       所有权限
        *         所有数据库,所有表
    """
    # 授予查询,添加权限
        grant select,insert on *.* to "lianxi"@"192.168.138.1";
    # 授予所有权限
        grant all on *.* to "lianxi"@"192.168.138.1";
    
    # 移除权限
        revoke select on *.* from "lianxi"@"192.168.138.1";
    # 移除所有权限
        revoke all on *.* from "lianxi"@"192.168.138.1";
    

    3.本地管理员用户密码忘记了

    解决思路是:

    1. 关闭MySQL服务
    2. mysqld_safe模式启动,即关闭MySQL的用户密码验证模块,也就是不加载授权表,然后禁止远程连接,仅能通过本地socket链接
    3. 无密码登登录到MySQL
    4. 修改密码
    5. 重启MySQL
    # 启动mysql:
    方式二:sudo service mysql start
    # 停止mysql:
    方式二:sudo service mysql stop
    
    # 停止mysql - 如果systemctl命令不好使,没有配置,使用上边命令
    [root@cs mysql]# systemctl stop mysqld
    # 启动安全模式,不加载授权表,然后禁止远程连接,&是后台执行
    [root@cs mysql]# mysqld_safe --skip-grant-tables --skip-networking &
    # 进入mysql,无用户无密码
    [root@cs mysql]# mysql
    # 修改密码前,先加载授权表
    mysql> flush privileges;
    # 修改root用户密码
    mysql> alter user root@'localhost' identified by '123';
    mysql> exit;
    
    # 杀死安全模式进程
    [root@cs mysql]# pkill mysqld
    # 启动mysql
    [root@cs mysql]# systemctl start mysqld
    

    4.操作数据库(操作文件夹)

    MySQL自带的数据库

    mysql> show databases;
    +--------------------+
    | Database           |
    +--------------------+
    | information_schema |
    | mysql              |
    | performance_schema |
    | sys                |
    +--------------------+
    

    各库解释如下:

    • information_schema,虚拟库,不占用磁盘空间,存储的是数据库启动后的一些参数,如用户表信息、列信息、权限信息、字符信息等。
    • performance_schema, MySQL 5.5开始新增一个数据库,主要用于收集数据库服务器性能参数,记录处理查询请求时发生的各种事件、锁等现象 。
    • mysql,授权库,主要存储系统用户的权限信息。
    • sys库所有的数据源来自performance_schema,目标是把performance_schema的把复杂度降低,让DBA能更好的阅读这个库里的内容。让DBA更快的了解数据库的运行情况。
    • test,MySQL数据库系统自动创建的测试数据库。test库在MySQL中特殊存在,一般部署完mysql后应当删除该库,并规定不能创建以testtest_字符开头的数据库。因为在MySQL中,test库对任意用户都有管理员权限,
    """
    查看新建数据库位置:
    Linux:
        sudo find / -name db100  #/var/lib/mysql
        sudo su root  切换到root用户
        cd /var/lib/mysql
    Windows:
        D:MySQL5.7mysql-5.7.25-winx64data => 看到数据库文件夹
    """
    # create database & create schema -- schema相当于database
    # (1) 增 create  ->创建数据库  
    	# 编码集一般:utf8,utf8mb4(比utf8多编译了复杂的中文等),gbk
        mysql> show charset;  # 查看字符集
        
        create database 数据库名 charset 编码集; 
    
        create database lianxi charset utf8;  # 创建名为lianxi 的数据库
    
    # (2) 查 show
        show databases; # 查看所有数据库
        show create database lianxi ; # 查看建库语句
    
    # (3) 改 alter
        alter database lianxi charset gbk ; # 修改数据库编码集
    
    # (4) 删 drop 
        drop database lianxi  # 删除数据库
    

    5.操作数据表(操作文件)

    # 1.操作数据表(操作文件)
        use lianxi # 选择数据库
        select database() # 查询当前库
        
    # (1) 增 create 
        创建数据表语法 :
            create table 表名(字段1 类型1,字段2 类型2,....)
        #创建t1表
        create table t1(id int , name char(12),sex varchar(10)) 
    
    # (2) 查 
        show tables; # 查看所有数据表
        show cteat table t1 ; #查看建表语句,查看表结构
        show cteat table t1 G; #查看建表语句,查看表结构,垂直显示
        desc t1 # 查看表字段信息
    
    # (3) 改  alter
        # modify 更改字段类型
        alter table t1 modify id char(10); #把id字段改成字符串类型
        # change 更改字段名称+类型
        alter table t1 change name sex int; #把name字段改sex,类型改int型
        # add 添加字段
        alter table t1 add age int ;
        # drop 删除字段(删除表中列) 不能删除主键字段
        alter table t1 drop age;
        # rename 更改表名
        alter table t1 rename t2 # 把表名t1改成t2
       
    # (4) 删 drop
        drop table t1 ; #删除t1数据表
        
    # 2.复制表相关的操作:
    # (1)复制一份一摸一样的表t3,表结构和t1一样,不复制记录
    	create table t3 like t1;
    # (2)创建一个表,复制另一张表的指定字段和记录
        create table t4(
        name char(10),
        sex char(10),
        primary key(name,sex) --注意,key不会复制: 主键、外键和索引,所以这里需要自己建立主键
        )
        select name,sex from t1;
    # (3)创建一个表,复制另一张表的指定字段和记录,但是创建的表字段又不想跟被复制表字段一致
        create table t5(
        user char(10),
        num char(10),
        primary key(user,num) 
        )
        select name as user,sex as num from t1; -- 给字段起别名
    

    6.操作记录(操作表内表格数据)

    # (1) 增 insert
        # 一次插入一条数据
        insert into t1 (id,name) values (1,"熊大")
        # 一次插入多条数据
        insert into t1 (id , name) values (2,"熊二"),(3,"光头强"),...
        # 不指定字段插入(按字段顺序插入)
        insert into t1 values (4,"舒畅")
        # 可以具体指定个别字段插入(其他字段自动填充null)
        insert into t1 (name) values ("沈腾")
        
    # (2)查 select
        select * from t1; # 查询表中所有数据
        select id,name from t1 ; #查询指定字段数据
        
    # (3) 改 update 
    语法:
        # update 表名 set 需要修改的字段=值 where 参考字段>=<值
        update t1 set name = "郭麒麟" where id = 1 #id=1那行的name改成郭麒麟
        
    # (4) 删除 delete (删除表中行)
    语法:
        # delete from 表名 where 条件
        delete from t1 where id = 1 # 删除id = 1 那行
        delete from t1  #删除表中所有数据,但不能重置自增字段
        truncate table t1 #重置表(删除所有数据 + 重置自增字段)
    

    7.数据类型

    # (1) 整型
    小整型 :tinyint  1个字节 有符号: [-128 ~ 127]  无符号 [0 ~ 255] unsigned
    大整型 : int       4个字节 有符号: [-21亿 ~ 21个亿左右] 无符号 [0 ~ 42亿]unsigned
    
    # (2) 浮点型
    # float(255,30)  30代表小数保留30个,整数+小数位数总长= 255
    float       #单精度  默认保留5位小数
    double   # 双精度  默认10多位
    decimal  #金钱类型 默认保留整数
    
    # (3) 字符串
    char (11)       #定长:固定开辟11个字符长度空间(身份证,手机号,银行卡)
    varchar(11)    #变长:动态最多开辟11个字符长度的空间( 评论,个性签名,广告 )
    text                #文本类型: (毕业论文,文章,长篇小说)
    
    select concat(id,name) from t1;  # 字段的拼接
    
    # (4) 枚举和集合
    enum  枚举 : 从列出来的数据当中选1个   (性别)
    set       集合 : 从列出来的数据当中选多个  (爱好) 自动去重
        create table t2(
    	sex enum("男性","女性") ,
    	hobby set("大保健","吃药","吃大腰子")	
    	);
        insert into t2 values ("男性","大保健,大保健,大保健") # 集合自动去重,只能添加一个大保健
        
    # (5) 时间类型 
    date  YYYY-MM-DD  年月日 (出生日期,结婚日期,春运,项目启动时间)
    time  HH:MM:SS    时分秒 (长跑记录,体育竞赛)
    year  YYYY        年份   (化石,红酒年份)
    datetime YYYY-MM-DD HH:MM:SS 年月日 时分秒 (订单流水,日志时间)
    	create table t1(d date , t time , y year , dt datetime); #创建表
        
    	insert into t1 values("2021-01-07" , "09:22:40" , "2021" , "2021-01-07 09:22:40");
        insert into t2 values (20200101,152030,2020,20200101153030); 
    	insert into t1 values(now(),now(),now(),now()) #自动添加当前时间
    
    timestamp YYYYMMDDHHMMSS (时间戳)  自动更新时间 (系统自动写入,不需要手动更新)  (用来记录修改的时间)
    	create table t2(dt datetime , ts timestamp); #创建表
    	
    	insert into t2 values(null , null); # 插入null时,自动更新时间
        insert into t2 values(20400107092930 , 20300107092930);
    	insert into t2 values(20400107092930 , 20400107092930); error 自动更新时间戳超过2038年
    
  • 相关阅读:
    datatables插件适用示例
    RabbitMQ三----'任务分发 '
    ftp上传下载
    运用JS导出ecxel表格、实现文件重命名
    浅谈MySQL索引背后的数据结构及算法【转】
    SQL语句导致性能问题
    由浅入深理解索引的实现【转】
    MySQL ACID及四种隔离级别的解释
    MyISAM引擎和InnoDB引擎的特点
    MySQL复制中slave延迟监控
  • 原文地址:https://www.cnblogs.com/jia-shu/p/14243699.html
Copyright © 2011-2022 走看看