• MySQL数据库(1)----入门级操作


    1.在服务器主机上以 root 用户登陆,创建位于其他客户端的新用户:

    mysql> CREATE USER  'newuser'@'192.168.1.109'  IDENTIFIED BY 'password';

    2.创建数据库

    mysql> CREATE DATABASE sampdb;

    3.设置当前默认数据库

    (i) 创建数据库后,当前默认数据库并没有指定,所以进行如下操作会没有结果:

    mysql> select database();
    +------------+
    | database() |
    +------------+
    | NULL       |
    +------------+
    1 row in set (0.00 sec)

    要想把 sampdb 设置为默认的数据库,需要执行 use 语句:

    mysql> use sampdb;
    Database changed
    mysql> select database();
    +------------+
    | database() |
    +------------+
    | sampdb     |
    +------------+
    1 row in set (0.00 sec)

    (ii)另一种选择默认数据库的方法是,调用 mysql 登录的时候在命令行上加上数据库的名字:

    root@javis:/usr/local/mysql$ mysql -p -uroot sampdb
    Enter password: 
    Welcome to the MySQL monitor.  Commands end with ; or g.
    Your MySQL connection id is 7
    Server version: 5.6.31 Source distribution
    
    Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved.
    
    Oracle is a registered trademark of Oracle Corporation and/or its
    affiliates. Other names may be trademarks of their respective
    owners.
    
    Type 'help;' or 'h' for help. Type 'c' to clear the current input statement.
    
    mysql> select database();
    +------------+
    | database() |
    +------------+
    | sampdb     |
    +------------+
    1 row in set (0.00 sec)

    如果是登录远程主机的话,还应该加上 -h 命令以指定主机:

    mysql -h serverHost.com  -p -uroot sampdb

    4.创建表

    (i) 在设置好当前默认的数据库的情况下,使用 'create table( );' 语句创建新的数据表

    mysql> create table student
        -> (
        -> name varchar(20) not null,
        -> sex enum('F','M') not null,
        -> student_id int unsigned not null auto_increment,
        -> primary key (student_id)
        -> )ENGINE =InnoDB;
    Query OK, 0 rows affected (0.07 sec)
    mysql> create table grade_event
        -> (
        -> date DATE NOT NULL,
        -> category ENUM ('T','Q') NOT NULL,
        -> event_id INT unsigned not null auto_increment,
        -> primary key (event_id)
        -> )engine =InnoDB;
    Query OK, 0 rows affected (0.07 sec)
    mysql> create table score
        -> (
        -> student_id int unsigned not null,
        -> event_id int unsigned not null,
        -> score int not null,
        -> primary key (event_id,student_id),
        -> index (student_id),
        -> foreign key (event_id) references grade_event (event_id),
        -> foreign key (student_id) references student (student_id)
        -> )engine = InnoDB;
    Query OK, 0 rows affected (0.09 sec)
    mysql> create table absence
        -> (
        -> student_id int unsigned not null,
        -> date DATE NOT NULL,
        -> primary key (student_id,date),
        -> foreign key (student_id) references student (student_id)
        -> )engine = InnoDB;
    Query OK, 0 rows affected (0.08 sec)

    varchar(n) 表示的是:该列可以存放长度可变的字符型值,且最大长度为n个字符。

    date数据类型表示日期。MySQL要求将日期表示为 'CCYY-MM-DD' 的格式,其中的CC、YY、MM、DD 分别代表了世纪、世界的年份、月和日。例如,要在MySQL里表示“2016年7月17日”这样一个日期,则需要使用 '2016-07-17'这样的格式命令。

    列的属性有 null(可以没有值) 和 not null(必须有值)。

    (ii) 使用 'describe table_name' 可以查看表的信息:

    mysql> describe student;
    +------------+------------------+------+-----+---------+----------------+
    | Field      | Type             | Null | Key | Default | Extra          |
    +------------+------------------+------+-----+---------+----------------+
    | name       | varchar(20)      | NO   |     | NULL    |                |
    | sex        | enum('F','M')    | NO   |     | NULL    |                |
    | student_id | int(10) unsigned | NO   | PRI | NULL    | auto_increment |
    +------------+------------------+------+-----+---------+----------------+
    3 rows in set (0.01 sec)

      这里可以看到,未定义为允许 NULL 的Default 列会显示NULL,那是因为NULL也可用于表明该列没有显式的 Default 子句。

      如果忘记了一个表中的列名、想知道其数据类型,或者想了解其宽度是多少,那么可以使用 describe 。还可以利用它来查看MySQL 在表行里存储各列的先后顺序。当执行 insert 或 load data 语句时,这个顺序很重要,因为这些语句要求各列的值是以它们的默认列顺序列出的。

      还可以用 desc ,explain 或 show 语句来获得表的信息:

    describe  student;
    desc     student;
    explain  student;
    show columns  from student;
    show fields from student;

    上述命令效果相同。

    (iii) 可以在 show 语句的末尾加上一个 like 子句,这样便只能看到与给定模式相匹配的那些列的信息:

    mysql> show columns from student like '%name';
    +-------+-------------+------+-----+---------+-------+
    | Field | Type        | Null | Key | Default | Extra |
    +-------+-------------+------+-----+---------+-------+
    | name  | varchar(20) | NO   |     | NULL    |       |
    +-------+-------------+------+-----+---------+-------+
    1 row in set (0.01 sec)

    (iv) 使用 'show tables;' 命令可以查看当前数据库中有哪些表:

    mysql> show tables;
    +------------------+
    | Tables_in_sampdb |
    +------------------+
    | member           |
    | president        |
    | student          |
    +------------------+
    3 rows in set (0.00 sec)

    (v) 使用 'show databases;' 命令可以查看当前连接到的服务器上的所有数据库:

    mysql> show databases;
    +--------------------+
    | Database           |
    +--------------------+
    | information_schema |
    | mysql              |
    | performance_schema |
    | sampdb             |
    | test               |
    +--------------------+
    5 rows in set (0.00 sec)

    5. 添加新行

    (i) 一次性指定全部列值的语法:

    insert into tbl_name values( value1, value2, value3, ... );

    例如:

    mysql> insert into student values('Jim','M',NULL);
    Query OK, 1 row affected (0.00 sec)
    
    mysql> insert into grade_event values('2016-07-17','Q',NULL);
    Query OK, 1 row affected (0.00 sec)

      在使用此语法时,VALUES 列表必须包含表中每一列的值,并且值的顺序要与各列在表里的存储顺序保持一致。(通常情况下,该顺序就是各列在该表的 CREATE TABLE 语句里指定的顺序。) 如果不太确定列的顺序,那么可以利用 DESCRIBE  tbl_name 语句来查明。

      在MySQL里,可以使用单引号或双引号将字符串和日期括起来,不过使用单引号会更标准一些。在 AUTO_INCREMENT 列里插入一个“缺失值” (missing value),可以让MySQL为该列自动生成下一个序号。

      MySQL还支持使用一条INSERT语句,同时指定多个值列表的方法,将多个行插入一个表里:

    INSERT INTO tbl_name VALUES(...),(...),...;

    例如:

    mysql> insert into student values('Tom','M',NULL),('Lily','F',NULL);
    Query OK, 2 rows affected (0.01 sec)
    Records: 2  Duplicates: 0  Warnings: 0

    (ii) 命令赋值列,并列出它们的值

    语法:

    INSERT INTO tbl_name (col_name1,col_name2,...)  VALUES(value1,value2,...);

    例如:

    mysql> insert into student (name,sex) VALUES('Lucy','F'),('Travis','M');
    Query OK, 2 rows affected (0.00 sec)
    Records: 2  Duplicates: 0  Warnings: 0

    对于没有在INSERT语句中指定的列,将被赋予默认值。例如,上面两条语句都为给 member_id 和 event_id 赋值,因此MySQL会将默认值NULL赋给它们。又因为 member_id 和 event_id 都是 AUTO_INCREMENT 列,因此最后的结果是这两列都会被分别赋予各自的下一个序号,这与显式地将NULL赋给它们是一样的。

    (iii) 使用一些列的 "列/值" 形式进行赋值

      此语法使用SET 子句实现,其中包含多个 col_name = value 的赋值形式,没有使用 VALUES() 列表的形式。

    INSERT INTO tbl_name SET col_name=value1,col_name=value2,...;

    例如:

    mysql> insert into student set name='Steve',sex='M';
    Query OK, 1 row affected (0.00 sec)
  • 相关阅读:
    URL模块之parse方法
    结合GET(),POST()实现一个简单、完整的服务器
    Node.js初探之实现能向前台返回东西的简单服务器
    float和position
    回归博客园·共享onload事件
    百度地图api的用法
    美丽数列
    低位值
    删括号
    牛牛找工作
  • 原文地址:https://www.cnblogs.com/dongling/p/5677324.html
Copyright © 2020-2023  润新知