• Python数据库之数据库基本操作


     

    安装(基于centos)

    yum -y install mariadb mariadb-server   # centos7版本
    
    yum -y install mysql mysql-server #centos7以下版本

    启动

    service mysqld start  #开启 centos7以下版本
    chkconfig mysqld on   #设置开机自启
    OR
    systemctl start mariadb  #centos7
    systemctl enable mariadb

    设置密码

    1  mysqladmin -u root -p123 password '1234' #修改root用户密码
    
    2. 进入mysql库修改user表 
    mysql>use mysql; 
    mysql>update user set password=password('你的密码') where user='root'; 
    mysql>flush privileges; 

    登录

    mysql               #本地登录,默认用户root,空密码,用户为root@127.0.0.1
    -- mysql -uroot -p1234 #本地登录,指定用户名和密码,用户为root@127.0.0.1
    -- mysql -uroot P端口号 -h 192.168.31.95 -p密码 #远程登录,用户为root@192.168.31.95

    查看

    ps aux |grep mysqld #查看进程
    netstat -an |grep 3306 #查看端口

    mysql的常用命令

    -- 
    -- 启动mysql服务与停止mysql服务命令:
    -- 
    -- net start mysql
    -- net stop  mysql
    -- 
    -- 
    -- 登陆与退出命令:
    -- 
    --    mysql -h 服务器IP -P 端口号 -u  用户名 -p 密码 --prompt 命令提示符  --delimiter 指定分隔符
    --    mysql -h 127.0.0.1 -P 3306 -uroot -p123
    --    quit------exit----q;
    -- 
    -- 
    -- s;   ------my.ini文件:[mysql] default-character-set=gbk [mysqld] character-set-server=gbk
    -- 
    -- prompt 命令提示符(D:当前日期 d:当前数据库  u:当前用户)
    -- 
    -- T(开始日志) 	(结束日志)
    -- 
    -- show warnings;
    -- 
    -- help() ? h
    -- 
    -- G;
    -- 
    -- select now();
    -- select version();
    -- select user;
    -- 
    -- c 取消命令
    -- 
    -- delimiter 指定分隔符

    忘记密码

    方法一:启动mysql时,跳过授权表
    [root@controller ~]# service mysqld stop
    [root@controller ~]# mysqld_safe --skip-grant-table &
    [root@controller ~]# mysql
    mysql> select user,host,password from mysql.user;
    +----------+-----------------------+-------------------------------------------+
    | user     | host                  | password                                  |
    +----------+-----------------------+-------------------------------------------+
    | root     | localhost             | *A4B6157319038724E3560894F7F932C8886EBFCF |
    | root     | localhost.localdomain |                                           |
    | root     | 127.0.0.1             |                                           |
    | root     | ::1                   |                                           |
    |          | localhost             |                                           |
    |          | localhost.localdomain |                                           |
    | root     | %                     | *23AE809DDACAF96AF0FD78ED04B6A265E05AA257 |
    +----------+-----------------------+-------------------------------------------+
    mysql> update mysql.user set password=password("123") where user="root" and host="localhost";
    mysql> flush privileges;
    mysql> exit
    [root@controller ~]# service mysqld restart
    [root@controller ~]# mysql -uroot -p123

    sql及其规范

    <1> 在数据库系统中,SQL语句不区分大小写(建议用大写) 。但字符串常量区分大小写。建议命令大写,表名库名小写;
    
    <2> SQL语句可单行或多行书写,以“;”结尾。关键词不能跨多行或简写。
    
    <3> 用空格和缩进来提高语句的可读性。子句通常位于独立行,便于编辑,提高可读性。
    
    1
    2
    SELECT * FROM tb_table
                WHERE NAME="YUAN";
    <4> 注释:单行注释:--
    
                   多行注释:/*......*/
    
    <5>sql语句可以折行操作

    库备份

    dbname参数表示数据库的名称;
    table表示备份那个数据库的表名
    backupname备份数据库名字
     
    第一种:备份一个数据库的那些表
    mysqldump -u username -p dbname table1 table2 ...-> BackupName.sql
     
    第二种:备份多个数据库
     
    mysqldump -u username -p --databases dbname2 dbname2 > Backup.sql
    加上了--databases选项,然后后面跟多个数据库
     
     
    第三种:备份所有库
     
    mysqldump -u username -p -all-databases > BackupName.sql
    第四种:就是将MySQL中的数据库文件直接复制出来。这是最简单,速度最快的方法。
     
    不过在此之前,要先将服务器停止,这样才可以保证在复制期间数据库的数据不会发生变化。
    如果在复制数据库的过程中还有数据写入,就会造成数据不一致。这种情况在开发环境可以,
    但是在生产环境中很难允许备份服务器。
     
      注意:这种方法不适用于InnoDB存储引擎的表,而对于MyISAM存储引擎的表很方便。
    同时,还原时MySQL的版本最好相同。
       
    第五种:第三方client软件备份

    还原库

    mysql -u root -p  dbname< BackupName.sql
    dbname  是可选项 ,是用于某些表还原到那些库才需要用到dbname
    直接还原库不用加上dbname,也就是数据库名

    SQL语句

    库操作

    库名的命令规则:首字符是字母,其余部分可以是字母、数字、下划线、@、$

    不能是关键字,如create database create

    最长128位
    不能是纯数字

     1 查询有所有库
     2 show databases;
     3  
     4 mysql> show databases;
     5 +--------------------+
     6 | Database           |
     7 +--------------------+
     8 | information_schema |      #虚拟库,不占用磁盘空间,存储的是数据库启动后的一些参数(用户表信息,列信息,权限信息,字符信息),存放于内存中
     9 | mysql              |               #授权库,存放mysql所有的授权信息
    10 | performance_schema |   #存放mysql服务的性能参数
    11 | test               |                  #测试库
    12 +--------------------+
    13 5 rows in set (0.00 sec)
    14  
    15 创建库
    16 create database   dbname
    17 
    18 查看某一个数据库
    19 show create database  dbname
    20  
    21 mysql> create database xixi;     #创建
    22 Query OK, 1 row affected (0.00 sec)
    23  
    24 mysql> show create database xixi;        #查看
    25 +----------+------------------------------------------------------------------+
    26 | Database | Create Database                                                  |
    27 +----------+------------------------------------------------------------------+
    28 | xixi     | CREATE DATABASE `xixi` /*!40100 DEFAULT CHARACTER SET utf8mb4 */ |
    29 +----------+------------------------------------------------------------------+
    30 1 row in set (0.00 sec)
    31 
    32 
    33 
    34 使用数据库 
    35 use  库名;
    36 看看当前use了哪个库
    37 select database()
    38 
    39 mysql> use xixi;
    40 Database changed
    41 mysql> select database();
    42 +------------+
    43 | database() |
    44 +------------+
    45 | xixi       |
    46 +------------+
    47 1 row in set (0.00 sec)
    48 
    49 
    50 
    51 修改:alter
    52  
    53 删除库
    54 drop database  数据库名;
    55  
    56 mysql> drop database xixi;           #删除库
    57 Query OK, 0 rows affected (0.01 sec)
    58  
    59 mysql> show databases;
    60 +--------------------+
    61 | Database           |
    62 +--------------------+
    63 | information_schema |
    64 | mysql              |
    65 | performance_schema |
    66 | test               |
    67 +--------------------+
    68 4 rows in set (0.00 sec)

    mysql数据库类型

    数值类型

    下面的表显示了需要的每个整数类型的存储和范围。

    日期 /时间类型

     

    字符串类型

    字符串类型指CHAR、VARCHAR、BINARY、VARBINARY、BLOB、TEXT、ENUM和SET。该节描述了这些类型如何工作以及如何在查询中使用这些类型。

    CHAR和VARCHAR类型类似,但它们保存和检索的方式不同。它们的最大长度和是否尾部空格被保留等方面也不同。在存储或检索过程中不进行大小写转换。

    BINARY和VARBINARY类类似于CHAR和

    ,不同的是它们包含二进制字符串而不要非二进制字符串。也就是说,它们包含字节字符串而不是字符字符串。

    BLOB是一个二进制大对象,可以容纳可变数量的数据。有4种BLOB类型:TINYBLOB、BLOB、MEDIUMBLOB和LONGBLOB。它们只是可容纳值的最大长度不同。

    有4种TEXT类型:TINYTEXT、TEXT、MEDIUMTEXT和LONGTEXT。这些对应4种BLOB类型,有相同的最大长度和存储需求。

    上面这些的数据类型都存放在数据表里面的,现在介绍数据表操作

    数据表操作

    1 我们需要进入某一个库里才能创建表
    2 一张表必须属于一个库
    3 表分成:字段+记录

    创建表

    语法

    create table 表名 (
                                字段名1  类型 (宽度) 约束条件,
                                字段名2  类型(宽度)  约束条件,
                                字段名3  类型(宽度)  约束条件,
                                .......
                                );
                                 
    注   :
    同一张表中,字段名不能相同
    字段名和类型必须有宽度和约束条件为可选项
     
    ```
    ```
    mysql> create table host (
        -> id int(10),
        -> hostname char(20),
        -> port int(5)
        -> );
    Query OK, 0 rows affected (0.11 sec)

    查看表

     1 查看某个库有多少表
     2 show  tables;
     3 查看某个新建表信息
     4 show  create table 表名;
     5 查看表结构
     6 desc   表名;
     7  
     8 查看表记录
     9 查看表的所有字段内容*
    10 select *  from  表名;
    11 mysql> select * from host;
    12 Empty set (0.00 sec)
    13  
    14 5.查看表内容
    15 查看表的某些字段的内容
    16 select  id  from host;              #查看host表的id字段的内容
    17 select  id,port   from   host;      #查看host表的id字段和port字典的内容
    18  
    19 
    20 
    21 
    22 mysql> show tables;
    23 +----------------+
    24 | Tables_in_xixi |
    25 +----------------+
    26 | host           |
    27 +----------------+
    28 1 row in set (0.00 sec)
    29  
    30 mysql> show create table host;
    31 +-------+-------------------------------------------------------------------------------------------------------------------------------------------------------------+
    32 | Table | Create Table                                                                                                                                                |
    33 +-------+-------------------------------------------------------------------------------------------------------------------------------------------------------------+
    34 | host  | CREATE TABLE `host` (
    35   `id` int(10) DEFAULT NULL,
    36   `hostname` char(20) DEFAULT NULL,
    37   `port` int(5) DEFAULT NULL
    38 ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 |
    39 +-------+-------------------------------------------------------------------------------------------------------------------------------------------------------------+
    40 1 row in set (0.00 sec)
    41  
    42 mysql>
    43 mysql> desc host;
    44 +----------+----------+------+-----+---------+-------+
    45 | Field    | Type     | Null | Key | Default | Extra |
    46 +----------+----------+------+-----+---------+-------+
    47 | id       | int(10)  | YES  |     | NULL    |       |
    48 | hostname | char(20) | YES  |     | NULL    |       |
    49 | port     | int(5)   | YES  |     | NULL    |       |
    50 +----------+----------+------+-----+---------+-------+
    51 3 rows in set (0.01 sec)
    52 field 代表字段名
    53 type代表该字段类型,
    54 Null 该字段是否可以为空
    55 default     该字段的默认设置
    56 extra        额外的设置
    57 
    58 mysql> select * from xixi.host;
    59 Empty set (0.00 sec)    #empty这里表示一张空表
    60  
    61 mysql> select id,port from xixi.host;
    62 Empty set (0.00 sec)
    create table employee(
                id int primary key auto_increment ,
                name varchar(20),
                gender bit default 1,   -- gender char(1)  default 1   -----    或者 TINYINT(1) 
                birthday date,
                entry_date date,
                job varchar(20),
                salary double(4,2) unsigned,
                resume text    -- 注意,这里作为最后一个字段不加逗号
              );
    
    
        /* 约束:
           primary key (非空且唯一)  :能够唯一区分出当前记录的字段称为主键!
           unique
           not null
           auto_increment 主键字段必须是数字类型。
           外键约束 foreign key  */

    修改表结构(字段)

    修改一列类型
          alter table tab_name modify 列名 类型 [完整性约束条件][first|after 字段名];
          alter table users2 modify age tinyint default 20;
          alter table users2 modify age int  after id;
       
    修改列名
          alter table tab_name change [column] 列名 新列名 类型 [完整性约束条件][first|after 字段名];
          alter table users2 change age Age int default 28 first;
    
    删除一列
          alter table tab_name drop [column] 列名;
          -- 思考:删除多列呢?删一个填一个呢?
          alter table users2 
                add salary float(6,2) unsigned not null after name,
                drop addr;    
    
    修改表名
          rename table 表名 to 新表名;
    修该表所用的字符集    
          alter table student character set utf8;
    
    删除表
        drop table tab_name;
    
    添加主键,删除主键
        alter table tab_name add primary key(字段名称,...) 
        alter table users drop primary key;
    
    eg:
        mysql> create table test5(num int auto_increment);
        ERROR 1075 (42000): Incorrect table definition; there can be only one auto column and it must be defined as a key
        create table test(num int primary key auto_increment);
        -- 思考,如何删除主键?
        alter table test modify id int;   -- auto_increment没了,但这样写主键依然存在,所以还要加上下面这句
        alter table test drop primary key;-- 仅仅用这句也无法直接删除主键
    
    -- 唯一索引
        alter table tab_name add unique [index|key] [索引名称](字段名称,...) 
    
        alter table users add unique(name)-- 索引值默认为字段名show create table users;
        alter table users add unique key user_name(name);-- 索引值为user_name
    
        -- 添加联合索引
        alter table users add unique index name_age(name,age);#show create table users;
    
        -- 删除唯一索引
        alter table tab_name drop {index|key} index_name

    表记录增,删,改

    -- 1.增加一条记录insert
    
          /*insert [into] tab_name (field1,filed2,.......) values (value1,value2,.......);*/
    
    
          create table employee_new(
                     id int primary key auto_increment,
                     name varchar(20) not null unique,
                     birthday varchar(20),
                     salary float(7,2)
                                 );
    
           insert into employee_new (id,name,birthday,salary) values
                         (1,'yuan','1990-09-09',9000);
    
           insert into employee_new values
           (2,'alex','1989-08-08',3000);
    
           insert into employee_new (name,salary) values
           ('xialv',1000);
    
          -- 插入多条数据
           insert into employee_new values
           (4,'alvin1','1993-04-20',3000),
           (5,'alvin2','1995-05-12',5000);
    
          -- set插入: insert [into] tab_name set 字段名=值
    
          insert into employee_new set id=12,name="alvin3";
    
    
    -- 2.修改表记录  update tab_name set field1=value1,field2=value2,......[where 语句]
    
        /*      UPDATE语法可以用新值更新原有表行中的各列。
                SET子句指示要修改哪些列和要给予哪些值。
                WHERE子句指定应更新哪些行。如没有WHERE子句,则更新所有的行。*/
    
    
        update employee_new set birthday="1989-10-24" WHERE id=1;
    
        --- 将yuan的薪水在原有基础上增加1000元。
        update employee_new set salary=salary+4000 where name='yuan';
    
    -- 3.删除表纪录
    
         delete from tab_name [where ....]
    
            /*    如果不跟where语句则删除整张表中的数据
                delete只能用来删除一行记录
                delete语句只能删除表中的内容,不能删除表本身,想要删除表,用drop
                TRUNCATE TABLE也可以删除表中的所有数据,词语句首先摧毁表,再新建表。此种方式删除的数据不能在
                事务中恢复。*/
    
                    -- 删除表中名称为’alex’的记录。
                    delete from employee_new where name='alex';
                    -- 删除表中所有记录。
                    delete from employee_new;-- 注意auto_increment没有被重置:alter table employee auto_increment=1;
                    -- 使用truncate删除表中记录。
                    truncate table emp_new;
  • 相关阅读:
    Object中的线程等待和Condition
    synchronized锁和Lock锁
    手写二叉排序树(二叉查找树、二叉搜索树)
    JDK源码之ArrayList-Iterator
    JDK源码之ArrayList
    Integer&int,自动装箱&自动拆箱
    学习Zookeeper第一课
    Thumbnailator处理图片
    线程的停止和中断
    BigInteger和BigDecimal
  • 原文地址:https://www.cnblogs.com/yinxin/p/8458428.html
Copyright © 2020-2023  润新知