Mysql学习笔记(1)

原创 2006年05月22日 14:37:00

 

 

C:/Program Files/MySQL/MySQL Server 5.0/bin>mysql -u root    -》(进入mqsql数据库)

Welcome to the MySQL monitor.  Commands end with ; or /g.

Your MySQL connection id is 2 to server version: 5.0.19-nt

 

Type 'help;' or '/h' for help. Type '/c' to clear the buffer.

 

如果用户存在密码:则

C:/Program Files/MySQL/MySQL Server 5.0/bin>mysql --user=root -p

Welcome to the MySQL monitor.  Commands end with ; or /g.

Your MySQL connection id is 2 to server version: 5.0.19-nt

 

mysql> create database dbtest;    (创建数据库)

Query OK, 1 row affected (0.09 sec)

 

mysql> show databases;   (显示所有数据库)

+--------------------+

| Database           |

+--------------------+

| information_schema |

| dbtest             |

| mysql              |

| test               |

+--------------------+

4 rows in set (0.00 sec)

 

mysql> use dbtest;      (运用数据库)

Database changed

 

mysql> create table student(    (在数据库dbtest中创建表)

    -> id int,

    -> name char(16),

    -> english tinyint,

    -> chinese tinyint,

    -> time timestamp

    -> );

Query OK, 0 rows affected (0.09 sec)

Mysql>alter table bonusrule add (bonus  int(6));     修改表结构

mysql> insert into student(id,name,english,chinese) values(1,"tome",66,99);   (往表中插入记录)

mysql> select * from student;  (查询表中记录)

+------+------+---------+---------+---------------------+

| id   | name | english | chinese | time                |

+------+------+---------+---------+---------------------+

| 1    | tome | 66      | 99      | 2006-03-24 11:12:19 |

+------+------+---------+---------+---------------------+

1 row in set (0.00 sec)

 

mysql> update student set english=80 where id=1;  (修改表中记录)

SELECT selection_list    选择哪些列

FROM table_list     从何处选择行

WHERE primary_constraint   行必须满足什么条件

GROUP BY grouping_columns      怎样对结果分组

HAVING secondary_constraint     行必须满足的第二条件

ORDER BY sorting_columns 怎样对结果排序

LIMIT count  结果限定

COUNT()函数计数非NULL结果的数目

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Mysql命令
>Mysql
命令
use <dbname> [LIKE wild];
show tables;
show databases;
?/help;
exit/quit;
mysqladmin version;
mysql mysqladmin version;
net start mysql;
mysqladmin variables;
mysqladmin -h hostname --port=port_number variables;
缺省的情况下,端口是3306,套接字的名字是
MySQL
mysqladmin shutdown;
mysqladmin reload;
mysqladmin
help;
mysqladmin -u root -p shutdown;
如果完全省略了 -p 选项,mysql 就认为您不需要口令,不作提示

shell>mysql
h mysql.domain.net u tom -p;
CREATE DATABASE db_name;
DROP DATABASE [IF EXISTS] db_name;
SHOW/ DESCRIBE;

source E:/Tomcat/webapps/2richshop1.1/doc/sql.txt;

GRANT privileges (columns) ON what TO user IDENTIFIED BY "password" WITH GRANT OPTION

修改root用户口令:
mysql> UPDATE user SET password=PASSWORD("new password") WHERE user=hunte;
  mysql> FLUSH PRIVILEGES;
  mysql> QUIT

 


SELECT
语句的语法如下:

SELECT selection_list    选择哪些列

FROM table_list     从何处选择行

WHERE primary_constraint   行必须满足什么条件

GROUP BY grouping_columns      怎样对结果分组

HAVING secondary_constraint     行必须满足的第二条件

ORDER BY sorting_columns 怎样对结果排序

LIMIT count  结果限定

注意:所有使用的关键词必须精确地以上面的顺序给出。例如,一个HAVING子句必须跟在GROUP BY子句之后和ORDER BY子句之前。


COUNT()
函数计数非NULL结果的数目

 

TIMESTAMP列类型提供一种类型,TIMESTAMP值可以从1970的某时的开始一直到2037年,精度为一秒,其值作为数字显示。你可以使用它自动地用当前的日期和时间标记INSERTUPDATE的操作。如果你有多个TIMESTAMP列,只有第一个自动更新。

自动更新第一个TIMESTAMP列在下列任何条件下发生:

l         列没有明确地在一个INSERTLOAD DATA INFILE语句中指定。

l         列没有明确地在一个UPDATE语句中指定且一些另外的列改变值。(注意一个UPDATE设置一个列为它已经有的值,这将不引起TIMESTAMP列被更新,因为如果你设置一个列为它当前的值,MySQL为了效率而忽略更改。)

l         你明确地设定TIMESTAMP列为NULL.

除第一个以外的TIMESTAMP列也可以设置到当前的日期和时间,只要将列设为NULL,或NOW()

例如,创建如下的表:

mysql> CREATE TABLE student

       -> (

       -> id int,

       -> name char(16),

       -> english tinyint,

       -> chinese tinyint,

       -> history tinyint,

       -> time timestamp

       -> );

向表中插入记录,可以查看效果:

mysql> INSERT student(id,name,englisht,Chinese,history) VALUES(11,”Tom”,66,93,67);

查看记录的存储情况:

mysql> SELECT * FROM student;

 

+------+---------+---------+---------+---------+----------------+
| id   | name    | english | chinese | history | time           |
+------+---------+---------+---------+---------+----------------+
|   11 | Tom     |      66 |      93 |      67 | 20010220123335 |
+------+---------+---------+---------+---------+----------------+
 

你可以看到time列纪录下了数据录入时的时间值。如果你更新改记录,在查看操作的结果:

mysql> UPDATE student SET english=76 WHERE id=11;

mysql> SELECT * FROM student;

+------+------+---------+---------+---------+----------------+
| id   | name | english | chinese | history | time           |
+------+------+---------+---------+---------+----------------+
|   11 | Tom  |      76 |      93 |      67 | 20010220125736 |
+------+------+---------+---------+---------+----------------+
可以清楚的看到,time列的时间被自动更改为修改记录的时间。

有时候你希望不更改任何值,也能打到修改TIMESTAMP列的值,这时只要设置该列的值为NULLMySQL就可以自动更新TIMESTAMP列的值:

mysql> UPDATE student SET time=NULL WHERE id=11;

mysql> select * from student where id=11;

+------+------+---------+---------+---------+----------------+
| id   | name | english | chinese | history | time           |
+------+------+---------+---------+---------+----------------+
|   11 | Tom  |      76 |      93 |      67 | 20010220130517 |
+------+------+---------+---------+---------+----------------+
通过明确地设置希望的值,你可以设置任何TIMESTAMP列为不同于当前日期和时间的值,即使对第一个TIMESTAMP列也是这样。例如,如果,当你创建一个行时,你想要一个TIMESTAMP被设置到当前的日期和时间,但在以后无论何时行被更新时都不改变,你可以使用这样使用:

l         MySQL在行被创建时设置列,这将初始化它为当前的日期和时间。

l         当你执行随后的对该行中其他列的更改时,明确设定TIMESTAMP列为它的当前值。

例如,当你在修改列时,可以把原有的值付给TIMESTAMP列:

mysql> UPDATE student SET english=66,time=time WHERE id=11;

mysql> select * from student where id=11;

+------+------+---------+---------+---------+----------------+
| id   | name | english | chinese | history | time           |
+------+------+---------+---------+---------+----------------+
|   11 | Tom  |      66 |      93 |      67 | 20010220130517 |
+------+------+---------+---------+---------+----------------+
另一方面,你可能发现,当你想要实现上面这个效果时,很容易用一个你用NOW()初始化的DATETIME列然后不再改变它,这样也许直接些。 但是,TIMESTAMP列的以后好处是存储要求比较小,节省空间。TIMESTAMP的存储需求是4字节,而DATETIME列的存储需求是8字节。

 

MySQL中,SQL的模式缺省是忽略大小写的。


MySQL中,数据库和表对应于在那些目录下的目录和文件,因而,内在的操作系统的敏感性决定数据库和表命名的大小写敏感性。这意味着数据库和表名在Unix上是区分大小写的,而在Win32上忽略大小写。


注意:在Win32上,尽管数据库和表名是忽略大小写的,你不应该在同一个查询中使用不同的大小写来引用一个给定的数据库和表。下列查询将不工作,因为它作为my_table和作为MY_TABLE引用一个表:

mysql> SELECT * FROM my_table WHERE MY_TABLE.col=1;

2、列名
列名在所有情况下都是忽略大小写的。

3、表的别名
表的别名是区分大小写的。下列查询将不工作,: 因为它用aA引用别名:

mysql> SELECT col_name FROM tbl_name AS a

           WHERE a.col_name = 1 OR A.col_name = 2;

4、列的别名
列的别名是忽略大小写的。

5、字符串比较和模式匹配
缺省地,MySQL搜索是大小写不敏感的(尽管有一些字符集从来不是忽略大小写的,例如捷克语)。这意味着,如果你用col_name LIKE a%搜寻,你将得到所有以Aa开始的列值。如果你想要使这个搜索大小写敏感,使用象INDEX(col_name, "A")=0检查一个前缀。或如果列值必须确切是"A",使用STRCMP(col_name, "A") = 0

简单的比较操作(>=>= < <=、排序和聚合)是基于每个字符的排序值。有同样排序值的字符(Ee)被视为相同的字符!

LIKE比较在每个字符的大写值上进行(“E”=”e”)

如果你想要一个列总是被当作大小写敏感的方式,声明它为BINARY

例如:

mysql> SELECT "E"="e","E"=BINARY "e";

+---------+----------------+
| "E"="e" | "E"=BINARY "e" |
+---------+----------------+
|       1 |              0 |
+---------+----------------+

 


MySQL提供的模式匹配的其他类型是使用扩展正则表达式。当你对这类模式进行匹配测试时,使用REGEXPNOT REGEXP操作符(RLIKENOT RLIKE,它们是同义词)

扩展正则表达式的一些字符是:

“.”匹配任何单个的字符。

一个字符类“[...]”匹配在方括号内的任何字符。例如,“[abc]”匹配“a”“b”“c”。为了命名字符的一个范围,使用一个“-”“[a-z]”匹配任何小写字母,而“[0-9]”匹配任何数字。

“ * ”匹配零个或多个在它前面的东西。例如,“x*”匹配任何数量的“x”字符,“[0-9]*”匹配的任何数量的数字,而“.*”匹配任何数量的任何东西。

正则表达式是区分大小写的,但是如果你希望,你能使用一个字符类匹配两种写法。例如,“[aA]”匹配小写或大写的“a”“[a-zA-Z]”匹配两种写法的任何字母。

如果它出现在被测试值的任何地方,模式就匹配(只要他们匹配整个值,SQL模式匹配)

为了定位一个模式以便它必须匹配被测试值的开始或结尾,在模式开始处使用“^”或在模式的结尾用“$”

为了说明扩展正则表达式如何工作,上面所示的LIKE查询在下面使用REGEXP重写:

为了找出以“b”开头的名字,使用“^”匹配名字的开始并且“[bB]”匹配小写或大写的“b”

 

mysql> SELECT * FROM pet WHERE name REGEXP "^[bB]";

+--------+--------+---------+------+------------+------------+
| name   | owner  | species | sex  | birth      | death      |
+--------+--------+---------+------+------------+------------+
| Buffy  | Harold | dog     | f    | 1989-05-13 | NULL       |
| Bowser | Diane  | dog     | m    | 1989-08-31 | 1995-07-29 |
+--------+--------+---------+------+------------+------------+
 

为了找出以“fy”结尾的名字,使用“$”匹配名字的结尾:

 

mysql> SELECT * FROM pet WHERE name REGEXP "fy$";

+--------+--------+---------+------+------------+-------+
| name   | owner  | species | sex  | birth      | death |
+--------+--------+---------+------+------------+-------+
| Fluffy | Harold | cat     | f    | 1993-02-04 | NULL  |
| Buffy  | Harold | dog     | f    | 1989-05-13 | NULL  |
+--------+--------+---------+------+------------+-------+
 

为了找出包含一个“w”的名字,使用“[wW]”匹配小写或大写的“w”

 

mysql> SELECT * FROM pet WHERE name REGEXP "[wW]";

+----------+-------+---------+------+------------+------------+
| name     | owner | species | sex  | birth      | death      |
+----------+-------+---------+------+------------+------------+
| Claws    | Gwen  | cat     | m    | 1994-03-17 | NULL       |
| Bowser   | Diane | dog     | m    | 1989-08-31 | 1995-07-29 |
| Whistler | Gwen  | bird    | NULL | 1997-12-09 | NULL       |
+----------+-------+---------+------+------------+------------+
 

既然如果一个正规表达式出现在值的任何地方,其模式匹配了,就不必再先前的查询中在模式的两方面放置一个通配符以使得它匹配整个值,就像如果你使用了一个SQL模式那样。

为了找出包含正好5个字符的名字,使用“^”“$”匹配名字的开始和结尾,和5“.”实例在两者之间:

mysql> SELECT * FROM pet WHERE name REGEXP "^.....$";

+-------+--------+---------+------+------------+-------+
| name  | owner  | species | sex  | birth      | death |
+-------+--------+---------+------+------------+-------+
| Claws | Gwen   | cat     | m    | 1994-03-17 | NULL  |
| Buffy | Harold | dog     | f    | 1989-05-13 | NULL  |
+-------+--------+---------+------+------------+-------+
 

你也可以使用“{ n }”“重复n操作符重写先前的查询:

 

mysql> SELECT * FROM pet WHERE name REGEXP "^.{ 5 }$";

+-------+--------+---------+------+------------+-------+
| name  | owner  | species | sex  | birth      | death |
+-------+--------+---------+------+------------+-------+
| Claws | Gwen   | cat     | m    | 1994-03-17 | NULL  |
| Buffy | Harold | dog     | f    | 1989-05-13 | NULL  |
+-------+--------+---------+------+------------+-------+

 

语法:SELECT FROM table_reference LEFT JOIN table_reference ON conditional_expr

 

1.创建数据库

mysql 提示,輸入:
create database lib13;
Enter
就會在 MySQL建立一個名為 lib13 的資料庫。

1.1显示所有数据库

Show databases

2.运用数据库

mysql 提示,輸入:
use lib13;
Enter

3.建表:

mysql 提示,輸入:
create table Test (
Enter
id int primary key auto_increment,
Enter
name varchar(16)
Enter
);
Enter

MySQL
就會在現在所選用的資料庫,產生一個 Test 資料表。在這個資料表中,有兩個欄位:id name id的資料型態是整數(INT),同時,也是 Test 資料表的主索引欄位 (primary key),並且再新增紀錄時,會自動遞增 (auto_increment)name的資料型態是可變長度的字元,最多可放16個字元 (VARCHAR(16))

4.显示表中列

mysql 提示,輸入:
show columns from Test;
Enter
或者

describe Test;
Enter

5.删除表

mysql 提示,輸入:
drop table Test;
Enter

6.删除数据库

mysql 提示,輸入:
drop database lib13;
Enter

 

 

 

Show.jsp代码

 

<%@page import="java.sql.*"

import ="java.util.*"

import ="java.io.*"

contentType="text/html; charset=gb2312"

%>

<html>

<head>

<title>使用MYsql数据库</title>

<meta name="GENERATOR" content="Microsoft FrontPage 4.0">

<meta name="ProgId" content="FrontPage.Editor.Document">

</head>

<body>

<p align="center"><u><font size="5" face="华文新魏">使用JSP读取Mysql数据库</font></u></p>

<%!

String host="localhost"; //数据库主机

String database="dbtest"; //数据库名

String user="root"; //用户名

String pass=""; //口令

%><% java.sql.Connection sqlConn; //数据库连接对象

java.sql.Statement sqlStmt; //语句对象

java.sql.ResultSet sqlRst; //结果集对象

//登记JDBC驱动对象

Class.forName ("org.gjt.mm.mysql.Driver").newInstance ();

//连接数据库

sqlConn= java.sql.DriverManager.getConnection ("jdbc:mysql://"+host+"/"+database,user,pass);

//创建语句对象

sqlStmt=sqlConn.createStatement (java.sql.ResultSet.TYPE_SCROLL_INSENSITIVE,java.sql.ResultSet.CONCUR_READ_ONLY);

//执行Sql语句

String sqlQuery="select count(*) from student";

sqlRst=sqlStmt.executeQuery (sqlQuery);

sqlRst.next();

int count=sqlRst.getInt(1); //取得总的留言记录数

sqlQuery="select * from student order by id desc;";

sqlRst=sqlStmt.executeQuery (sqlQuery); //执行SQL语句

%>

总共有<%=count%>个学生

<table border="1" width="100%" bordercolorlight="#CC99FF" cellpadding="2" bordercolordark="#FFFFFF" cellspacing="0">

<tr>

  <td align="center">&nbsp;ID</td>

  <td align="center">姓名</td>

  <td align="center">英语</td>

  <td align="center">中文</td>

  <td align="center">时间</td>

</tr>

<% while (sqlRst.next()) { //取得下一条记录 %>

<tr><!--显示记录-->

  <td><%=sqlRst.getString("id")%></td>

  <td><%=sqlRst.getString("name")%></td>

  <td><%=sqlRst.getString("english")%></td>

  <td><%=sqlRst.getString("chinese") %></td>

  <td><%=sqlRst.getString("time") %></td>

</tr>

<% } %>

</table>

</body>

<%

//关闭结果集对象

  sqlRst.close();

  //关闭语句对象

sqlStmt.close ();

//关闭数据库连接

sqlConn.close();

%>

 

相关文章推荐

Mysql学习笔记1

  • 2012年07月25日 16:45
  • 35KB
  • 下载

(一)windows系统Mysql安装与配置1---学习笔记

(一)Mysql安装有两种方式: 第一种是mis个格式安装 如果是msi格式的直接点击安装,按照步骤一步一步的next就可以了。 第二种是.ZIP格式安装 zip格式是自己解压,解压缩之后其实MyS...
  • zjq001X
  • zjq001X
  • 2016年12月05日 13:11
  • 170

树莓派学习笔记1 -- 解决mysql无法远程连接问题

以前从来没学过博客,以前搭建

MySQL学习笔记 1 - 基础知识

关系数据库中数据是以表形式存储的,所以存储引擎也可以称为表类型(即存储和操作表的类型)。查询MySQL中支持的存储引擎:show engines; 或者 showengines/g 或者  show ...

java连接MySQL数据库入门(学习笔记1)

准备工作 安装MySQL数据库,如果安装出了问题需要彻底删除以前的mysql,可以在网上查到方法。 安装MySQL WorkBench,在官网下载,选择安装位置一路默认下一步。(这一步不是必要,初学有...
  • londa61
  • londa61
  • 2016年11月10日 22:28
  • 89

MySQL 学习笔记(1)

前言 笔记内容是基于实验楼的数据库课程,感兴趣的可以戳进去学习下。应该是笔记,所以内容可能是简略的,残缺的。因为笔记的内容主要是针对自己的学习。 1.MySQL介绍 MySQL是一个关系型数据...

php和mysql web开发学习笔记1 --关于在phpstudy中发送电子邮件的例子 自动把更改后的密码发到客户邮箱中 [mail function]函数设置

在学习上边这本书时,书上讲到第27章时,当更改密码时,要求把新改的密码发到用户注册时的邮箱。在windows服务器下,需要按以下步骤进行配置:本文以用zhengxue20145@163.com为发送邮...

MYSQL数据库 - 学习笔记1 - 数据库基本操作

在windows及linux系统都适用!!   登陆: mysql -h locahost -u root -p 显示、创建、删除数据库: show databases; 显示所有的数据...
  • wzs298
  • wzs298
  • 2013年08月04日 17:21
  • 1155

MySQL学习笔记1

前言:         博客里更新的MySQL知识多为总结常用方法方式,不保证严格的学术性。 一. MySQL 简介:   MySQL是一个小型关系型数据库管理系统   二. my...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Mysql学习笔记(1)
举报原因:
原因补充:

(最多只允许输入30个字)