MySQL数据库的表和库操作

怎甘沉沦 提交于 2019-12-04 05:50:06

mac系统下mysql密码设置与破解
mysqladmin -uroot -p password "123"    # 为root账户设置密码
mysqladmin -uroot -p123 password "123abc" # 修改root用户密码

忘记密码后如何强制刷新密码?
1、先停止mysql服务端
2、在终端上以超级用户的形式输入命令:mysqld_safe --skip--grant--tables
3、在开启一个终端,输入:mysql -uroot -p 登陆mysql
4、进入mysql后,修改root用户密码;输入命令:update mysql.user set password=password("123") where user="root" and host="localhost";
5、然后在刷新,输入命令:flush privileges;
6、然后再再终端上干掉mysql服务
7、然后再正常重启mysql服务端。

权限管理
1、创建账户
    创建本地账号(只能在mysql服务端的那台机子上登陆)
        create user 'xu'@'localhost' identified by '123abc'
    创建远程账号
        create user 'xu'@'192.169.0.30' identifide by '123abc' # 只能在此ip地址的机器上登陆
        create user 'xu'@'192.169.0.%' identifide by '123abc' # 能在192.169.0这一网段的机器上登陆
        # 使用此账户登陆
        mysql -uxu -p123abc -h 服务端ip地址
2、授权
    user :*.* 所有权限 (不包含grant权限)
        授予权限:grant all on *.* to 'xu'@'localhost';
                grant select on *.* to 'xu'@'localhost'; 只放行查询权限
        移除权限:revoke select on *.* to 'xu'@'localhost'; 删除权限
    db:db1.*   ,库级别的权限(只对某一个库有权限)
        授予db权限:grant select on db1.* to 'xu'@'localhost'; 只放行db1库下的所有表的查询权限
    table_priv: db1.t1 ,表级别的权限
        授予权限:grant select on db1.t1 to 'xu'@'localhost'; 只放行db1库下的t1表的查询权限
    columns_priv:字段级别
        授予权限:grant select(id,name,age) on db1.t1 to 'xu'@'localhost'; 只放行db1下的t1表的id,name,age字段的查询权限



库的增删改查
增:创建数据库
语法:create database 数据库名 charset utf-8;

删:删除数据库
语法:drop database 数据库名;

改:改变数据库的字符编码
语法:alter database 数据库名 charset gbk;

查:
语句:1、show databases;                 查询有哪些数据库,
    2、show create database 数据库名;  查询某个数据库的结构,
    3、select database();            查询正在使用的数据库名

切换到某个数据库的目录下:use 数据库名

表操作
一、存储引擎 --> 表的类型
    表的类型不同所对应的存储的方式不同。
    通俗点的表达方式:存储引擎就是如何存储数据、如何为数据建立索引和如何更新、查询数据等技术的实现方法。

    在MySQL中默认的存储引擎便是innodb
    还有其他的存储引擎:MyISAM存储引擎、NDB存储引擎、Memory存储引擎、Infobright存储引擎、NTSE 存储引擎、BLACKHOLE
    

二、表的增删改查
增:创建表
语句结构:
create table 表名(
字段名1 类型[(宽度) 约束条件],
字段名2 类型[(宽度) 约束条件],
字段名3 类型[(宽度) 约束条件]
);
ps:    1、在同一张表中,字段名不能相同
    2、宽度和约束的条件可以选择
    3、字段名和类型是必须要有的

查:查看表的结构:
语句结构:1、desc 表名;
        2、show create table 表名\G;  # 查看表的详细结构

删:删除表
drop table user;

改:改变表的结构
改变表的表名:
    alter table 旧表名 rename 新表名;
增加字段:
    alter table 表名 add 字段名 数据类型[(宽度) 约束条件];
    alter table 表名 add 字段名 数据类型[(宽度) 约束条件] first; # 在第一个插入新字段
    alter table 表名 add 字段名 数据类型[(宽度) 约束条件] after 字段名; # 在某个字段的后面插入新的字段
修改存储引擎:
    alter table 表名     engine = innodb;
删除字段:
    alter table 表名 drop 字段名;
修改字段类型:
    alter table 表名 modify 字段名 字段新类型[(宽度), 约束条件];
对已经存在的表增加主键:
    alter table 表名 add primary key(字段名,...)  # 可以是单个主键也可意识复合组建
删除主键:
    alter table 表名 drop primary key

复制表结构:    
    1、create table 新表名 select * from 要复制的表名 where 1=2; # 只复制表结构,不复制表中的数据,(key不会复制:主键、外键和索引不会复制)
    2、create table 新表名 like 就表名  # 复制表结构,并且key一起复制。

三、数据类型
详细参考:
    http://www.runoob.com/mysql/mysql-data-types.html
    http://dev.mysql.com/doc/refman/5.7/en/data-type-overview.html
1、整数
    tinyint: 大小1个字节 有符号范围(-128,127),无符号范围(0,256)
    int:    大小4个字节  有符号范围(-2**31,2**31-1),无符号范围(0,2**32-1)
    bigint: 大小8个字节  有符号范围(-2**63,2**63-1),无符号范围(0,2**64-1)
2、浮点数
    float:  在小数位数比较长的话,精确度降低
    double: 在小数位数比较长的话,精确度降低,但比float精确度高
    decimal: 精确,小数位数过多,精确度也会降低。
3、字符串
     char([设制存储字节的最大字节]):默认为4个字节。
         优点:存取速度快
         缺点:浪费空间
     varchar([设置存储字节的最大字节]):数据有多少个字节存储多少个字节
         优点:精准,节省空间
         缺点:存取速度慢
     ps:1、为什么varchar的存取速度慢,因为在用varchar存数据时,会先用1个或两个字节来存储数据的大小,这样在读取时,就会先读取这个数据的大小,在根据数据的大小来读取数据,这样就会导致读取的速度慢
        2、若存储的子节等于最大子节数的时候,char比varchar所占用的空间要小。因为varchar要分出1个或2个子节来存储数据的大小。

        sql优化:1、创建表时,定长的类型要放在前面,变长的往后放.
              2、当存储的数据子节大小>255;可以在数据库中存放文件路径或url
4、枚举
    相当于多个选择中选择一个
    如性别: sex enum("男","女") not null default="男"
    default是设置此字段的默认值。若是插入的数据没有在选项中择会插入默认值。
5、集合
    多个选项中选择多个
    如爱好:hobby set("足球","篮球","LOL")
6、时间
    date      格式:YYYY-MM-DD
    datetime  格式:YYYY-MM-DD HH:MM:SS
    time      格式:HH:MM:SS
    year      格式:YYYY

ps:常用datetime

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!